2013-07-23 4 views
1

У меня проблема с паролем на пару дней. Проблема в том, что у меня есть таблица с несколькими пользовательскими ячейками таблицы, и каждая ячейка имеет несколько кнопок. Но я всегда получаю значение тегов как ноль. Ниже приведен мой кодПользовательский тег Button Button всегда возвращает ноль

- (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CuatomCell_Contacts *cell = (CuatomCell_Contacts *) [tableView dequeueReusableCellWithIdentifier:@"cellA"]; 
    if (cell == nil) 
    { 
     NSArray *topLevelObjects   = [[NSBundle mainBundle] loadNibNamed:@"CuatomCell_Contacts" owner:Nil options:nil]; 

     for (id currentObject in topLevelObjects) 
     { 
      if ([currentObject isKindOfClass:[UITableViewCell class]]) 
      { 
       cell = (CuatomCell_Contacts *) currentObject; 

       break; 
      } 
     } 
    } 
    cell.selectionStyle=UITableViewCellSelectionStyleNone; 
    cell.accessoryType = UITableViewCellAccessoryNone; 
    IstructContacts *ObjIstructContacts = nil; 
    if (table == self.searchDisplayController.searchResultsTableView) 
    { 
     ObjIstructContacts = [self.filteredListContent objectAtIndex:indexPath.row]; 
    } 
    else 
    { 
     ObjIstructContacts = [self.sectionedListContent objectAtIndexPath:indexPath]; 
    } 

    cell.m_CtrlLblName.text = ObjIstructContacts.m_strName; 
    //cell.m_CtrlLblContact_Id.text=ObjIstructContacts.m_strContact_Id; 
    NSLog(@"%@",ObjIstructContacts.m_strImageUrl); 
    if ([ObjIstructContacts.m_strImageUrl isEqualToString:@"No_image"]) 
    { 
     cell.m_CtrlImgImage.image=[UIImage imageNamed:@"Person_Dumy.jpeg"]; 
    } 
    else 
    { 
     NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: ObjIstructContacts.m_strImageUrl]]; 

     cell.m_CtrlImgImage.image=[UIImage imageWithData: imageData]; 
    } 
    cell.M_CtrlBtnChat.tag=indexPath.row; 
    [cell.M_CtrlBtnChat addTarget:self action:@selector(MoveToNextView:) forControlEvents:UIControlEventTouchUpInside]; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [button addTarget:self 
       action:@selector(MoveToNextView:) 
    forControlEvents:UIControlEventTouchDown]; 
    [button setTitle:@"Custom Action" forState:UIControlStateNormal]; 
    button.frame = CGRectMake(150.0f, 5.0f, 150.0f, 30.0f); 
    button.tag=indexPath.row; 
    [cell.contentView addSubview:button]; 

    return cell; 
} 



-(void)MoveToNextView:(id)sender 
{ 
    UIButton *button = (UIButton *)sender; 

    NSLog(@"Tag Value = %d",button.tag); 
} 

Значение тега всегда возвращает нуль .. Как в статических, так и в динамических действиях кнопок.

+0

Сколько строк у вас в разделе просмотра таблицы? – rptwsthi

+0

проверьте indexPath.row, если он возвращает то, что вы ожидаете. –

ответ

1

Попробуйте установить тег раздела также как пыльник

cell.M_CtrlBtnChat.tag = [[NSString stringWithFormat:@"%d%d",indexPath.section,indexPath.row]intValue]; 

если у вас есть более 1 раздел и в каждом разделе есть 1 строка, то может быть, вы получите 0 для всех строк так получить значение разделы также как выше код ..

для EX: Если вы хотите, чтобы получить номер строки в качестве метки к кнопке, то вы назначили, что с его indexPath.row и вы получите 0 каждый раз, но если вы установите его с разделом, то вы получите подобные 00, 10, 20 и т. Д. Если у вас есть несколько разделов, и в каждом разделе есть только одна строка.

Обновление: Также установлено dequeueReusableCellWithIdentifier на другое значение и проверьте его. как ниже ...

NSString *cellID = [NSString stringWithFormat:@"Section:%d Row:%d",indexPath.section,indexPath.row]; 
CuatomCell_Contacts *cell = (CuatomCell_Contacts *) [tableView dequeueReusableCellWithIdentifier:cellID]; 
+1

Те же теги для строк в indexPath [11,2] и [1,12] ... – cncool

+0

не понимаю, что вы хотите сказать? –

+0

@ParasJoshi, каково будет значение тега для кнопки в индексе [11,2] и [1,12], таким образом это будет 112 для тега в кнопке, Как определить путь indexpath? –

-3

Вы настроите кнопку в неправильном направлении

Вместо код, как показано ниже,

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self 
      action:@selector(MoveToNextView:) 
forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Custom Action" forState:UIControlStateNormal]; 
button.frame = CGRectMake(150.0f, 5.0f, 150.0f, 30.0f); 
button.tag=indexPath.row; 
[cell.contentView addSubview:button]; 

Пожалуйста, попробуйте с моим следующим кодом

UIButton *button = [UIButton alloc]init]; 
button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self 
      action:@selector(MoveToNextView:) 
forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Custom Action" forState:UIControlStateNormal]; 
button.frame = CGRectMake(150.0f, 5.0f, 150.0f, 30.0f); 
button.tag=indexPath.row; 
[cell.contentView addSubview:button]; 

Наслаждайтесь Программирование!

+3

выделение кнопки [[UIButton alloc] init] только для того, чтобы перезаписать этот объект новым объектом, ничего не делает, кроме отработанных тактовых циклов. – cncool

+1

Что? почему первый ошибается? –

+0

@cncool: тег зависит от инициализации и объявления элемента управления, которым он владеет. И я также столкнулся с той же проблемой, которую я решил использовать только с инициализацией. Прежде всего, пусть испытуемый попытается решить это решение. @ Lithu TV первый неправильно, я имел в виду, что для тега он должен инициализировать кнопку, хотя он явно инициализирован с использованием настраиваемого типа –

2

Я опробовал образец проекта и она отлично работает для меня, как этот

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellIdentifier [email protected]"CustomCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (!cell) 
    { 
     NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; 
     cell = (UITableViewCell*)[array objectAtIndex:0]; 
     } 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [button addTarget:self 
       action:@selector(MoveToNextView:) 
    forControlEvents:UIControlEventTouchDown]; 
    [button setTitle:@"Custom Action" forState:UIControlStateNormal]; 
    button.frame = CGRectMake(150.0f, 5.0f, 150.0f, 30.0f); 
    button.tag=indexPath.row; 
    [cell.contentView addSubview:button]; 

    return cell; 
} 
-(void)MoveToNextView:(id)sender 
{ 
    UIButton *button = (UIButton *)sender; 

    NSLog(@"Tag Value = %d",button.tag); 
} 

и на кнопку мыши мой журнал показывает

2013-07-23 11:58:31.719 Trial[895:11303] Tag Value = 0 
2013-07-23 11:58:33.726 Trial[895:11303] Tag Value = 1 
2013-07-23 11:58:35.126 Trial[895:11303] Tag Value = 2 
2013-07-23 11:58:35.998 Trial[895:11303] Tag Value = 3 
2013-07-23 11:58:36.910 Trial[895:11303] Tag Value = 4 
+0

эй я отправляю этот ответ на этот вопрос. Посмотрите эту ссылку http://stackoverflow.com/questions/17785855/button-inside-a-custom-uitableviewcell-not-working/17786750?noredirect=1#comment25945506_17786750 :) –

3

Попробуйте этот метод , более чистый способ найти строку, содержащую вид.

-(IBAction)cellButtonTapped:(id)sender { 
    UIButton *button = sender; 
    CGPoint correctedPoint = [button convertPoint:button.bounds.origin toView:self.tableview]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:correctedPoint]; 
    NSLog(@"Button tapped in row %d",indexPath.row); 
    }  
+0

Благодаря! Это почти сработало для меня, но в конце я использовал ячейку, а не кнопку, с 'NSIndexPath * indexPath = [tableView indexPathForCell: cell]; indexPath.row;' – chiliNUT

Смежные вопросы