TableView addGesture到UIImageView以了解被点击的单元格

时间:2013-01-20 17:51:53

标签: iphone ios uitableview uigesturerecognizer

我用section创建tableView,我使用自定义单元格并以这种方式定义带有图像的复选框(UIImageView):

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

    static NSString *CellIdentifier = @"cellIdentifier";
    StandardCellWithImage *cell = (StandardCellWithImage *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil) {
        cell = [[StandardCellWithImage alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSeparatorStyleNone;
    }

    cell.checkbox.tag = indexPath.row;
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didSelectedImageAtIndexPath:)];
    tapGesture.numberOfTapsRequired = 1;
    tapGesture.delegate = self;
    [cell.checkbox addGestureRecognizer:tapGesture];
    cell.checkbox.userInteractionEnabled = YES;

    return cell;
}

在didSelectedImageAtIndexPath方法中,我使用:

- (void) didSelectedImageAtIndexPath:(id) sender {
    UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender;
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:gesture.view.tag inSection:0];
}

但是我在这里只有一行而不知道哪一部分用户点击这一行。有没有可能认出来?

2 个答案:

答案 0 :(得分:2)

如果您在view.tag中编码项目/部分,如下所示:

view.tag = indexPath.section * kMAX_SECTION_SIZE + indexPath.item;

然后你可以这样做:

- (void) didSelectedImageAtIndexPath:(id) sender {
  UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender;


  NSIndexPath *indexPath = [NSIndexPath indexPathForRow:gesture.view.tag % kMAX_SECTION_SIZE
                                        inSection:int(gesture.view.tag / kMAX_SECTION_SIZE)];
}

答案 1 :(得分:1)

不要在cellForRowAtIndexPath中的复选框(单元格中的按钮)上添加手势,而是在单元格(StandardCellWithImage)中实现按钮操作,并从那里调用委托。

  1. 将操作设置为单元格中的按钮&在那里实现它。
  2. 在单元格中声明协议&在其中声明你想要的方法didSelectedImageAtIndexPath:
  3. 在视图控制器中实施此协议
  4. 将cellForRowAtIndexPath中的单元格委托设置为selt(查看控制器)
  5. 当您点击单元格中的复选框方法时,将调用您设置为复选框按钮的操作。
  6. 从那里调用委托方法didSelectedImageAtIndexPath:当然,您可以使用[(UITableView *)self.superview indexPathForCell:self]从那里返回indexPath对象。 //这里是self = custon cell object
  7. 注意:

    您可以在单元格中存储对tableView的弱引用,您可以在表格的dataSource的-tableView:cellForRowAtIndexPath:中设置它。这是更好的,因为依赖self.superview始终完全是tableView是脆弱的。谁知道Apple将来如何重新组织UITableView的视图层次结构。