2015-03-03 2 views
0

У меня есть пользовательский UITableViewCell (MyCell), который содержит UIButton и другую пользовательскую ячейку. Я хотел бы выбрать ячейку программно, чей UIButton был использован пользователем. На самом деле я могу вызывать методы при нажатии кнопок, но не могу выбрать ячейку. Что я пропустил? Он не сбой, он работает, но этот код не вносит никаких изменений, кроме NSLog.Невозможно выбрать программную ячейку таблицы

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    if ([object[@"num"] isEqualToString:@"one"]) { 

     MyCustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

     //... cell display 
     cell.acceptLabel.tag = indexPath.row; 
     [cell.acceptLabel addTarget:self action:@selector(didTapBttn:) forControlEvents:UIControlEventTouchUpInside]; 
     return cell; 

    } else { 

     MyCustomTableViewCellB *cellMessage = [tableView dequeueReusableCellWithIdentifier:@"cell2" forIndexPath:indexPath]; 

     //... cell display 

     return cellMessage; 

    } 

} 

//1. version 
- (void)didTapBttn:(id)sender { 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition: 
    UITableViewScrollPositionNone]; 
    NSLog(@"button tapped"); 

} 
// 2. version 
- (void)didTapBttn:(id)sender { 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 

[self.tableView.delegate tableView:self.tableView didSelectRowAtIndexPath:indexPath]; 
     NSLog(@"button tapped"); 

} 
+0

Что вы пытаетесь достичь этим? Доступ к 'didSelectRowAtIndexPath' или установка фона ячейки как выделенного? – random

+0

@ случайный доступ к 'didSelectRowAtIndexPath'. – rihe

+0

Просто переместите содержимое с 'didSelectRowAtIndexPath' на другой метод и укажите его. – random

ответ

1

Почему вы не внутри клетки установить

-(void)awakeFromNib 
{ 
    //other code... 
    self.button.userInteractionEnabled = NO; 
} 

Водопроводная будет передан в электролизер через респондеров цепи.

+0

Отлично, похоже, он работает. Хорошее решение, спасибо! – rihe

0

Ну, предположим, что вы уверены, что cell.acceptLabel - это UIButton (странное имя для кнопки) и что оператор if истинен в вашем случае: Тогда остается сказать, что ваша первая версия должна быть правильной, за исключением того, что вы используете неверный indexPath. Вы присвоили indexPath.row ячейки как тег кнопки (очень хорошо). Но почему вы не используете его тогда?

- (void)didTapBttn:(id)sender { 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:((UIButton *)sender).tag inSection:0]; 
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; 
    NSLog(@"button tapped"); 
} 

Попробуйте это :)

PS: Вы все равно должны пересмотреть смысл за свой подход, хотя. Выбор ячейки tableview обычно выполняется путем нажатия на ячейку.

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