无法以编程方式选择表格视图单元格

时间:2015-03-03 21:53:35

标签: ios objective-c uitableview uibutton

我有一个自定义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");

}

2 个答案:

答案 0 :(得分:1)

为什么不在电池组内

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

点击将通过响应者链传递到单元格。

答案 1 :(得分: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单元格通常是通过点击一个单元格来完成的。