iphone - 从自定义TableCellView执行segue

时间:2014-03-13 18:43:13

标签: ios iphone objective-c uitableview

我有一个UITableView,我在其中填充自定义构建的UITableViewCells。这些有一张图片和一些标签。

有没有办法在点击图片时执行某个segue,但是当我点击每个标签时它会执行不同的segue。我只想在点击UIImageView或UILabels时执行这些segue。

我目前正在玩以下想法。

  1. 在cellForRowAtIndexPath中创建手势识别器时,为UIImageView和UILables添加手势识别器
  2. 上述触控手势会触发segue
  3. 我的代码在我创建UITableViewCells的UITableView cellForRowAtIndexPath委托中看起来像这样

        cell.myImage.userInteractionEnabled = YES;
        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doSomething:)];
        singleTap.numberOfTapsRequired = 1;
        singleTap.delegate = self;
        [cell.myImage addGestureRecognizer:singleTap];
    

    当我点击UIImageView时,这会覆盖表视图的didSelectRowAtIndexPath委托,所以我尝试从doSomething:函数触发segue但是这个函数不知道UITableView indexPath所以无法将正确的信息发送到目的地viewcontroller(它总是发送0)。

    我确信必须轻松做到这一点

    欢迎任何想法。提前谢谢。

2 个答案:

答案 0 :(得分:0)

UIGestureRecognizers具有您可以访问的视图属性。迭代该视图的超级视图,直到您拥有UITableViewCell并调用:

[tableView indexPathForCell:cell];

应该为您提供IndexPath。

答案 1 :(得分:0)

您可以通过在点击处理程序NSIndexPath中添加以下内容来获取myImage个单元格doSomething:

- (void)doSomething:(UITapGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateEnded) {
       CGPoint touch = [sender locationInView:self.tableView];
       NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:touchPoint];

       NSLog(@"indexPath: %@", indexPath);

     //Select cell and trigger didSelectRowAtIndexPath:

      [self.myTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
      [self tableView:self.myTableView didSelectRowAtIndexPath:indexPath];
    }
}