2014-03-13 43 views
1

我有一个UITableView我在其中填充自定义生成的UITableViewCells。这些有一张照片和一些标签。iphone - 执行segue从自定义TableCellView

是否有任何方式,当点击图片时,它执行某个segue,但当我点击每个标签时,它执行不同的segues。我只想在单击UIImageView或UILabels时执行这些segues。

我目前在玩下面的想法。

  1. 中的cellForRowAtIndexPath在创建他们的时候添加手势识别器来的UIImageView和UILables
  2. 以上触摸手势将触发SEGUE

我的代码看起来像这样在我创造我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]; 

当我点击th表时,这将重写表视图的didSelectRowAtIndexPath委托e UIImageView,所以我试着从doSomething:函数中触发segue,但是这个函数并不知道UITableView indexPath,因此无法将正确的信息发送到目标视图控制器(它总是发送0)。

我敢肯定,必须有一个容易做到这一点

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

回答

0

你可以得到电池myImageNSIndexPath属于中加入以下挖掘处理器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]; 
    } 
} 
+0

我在哪里添加此代码?由singleTap触发的方法没有定义事件标识符,因此UITouch * touch = [[allTouch] anyObject];失败。 – anothersanj

+0

@anothersanj - 更新了我的答案! –

+0

哇,太好了,谢谢!我的doSomething方法现在具有所选tableCell的indexPath。有没有什么办法让我把它传递给prepareForSegue方法或者通过编程方式触发didSelectRowAtIndexPath,这样segue就可以用正确的indexPath来执行了? – anothersanj

0

UIGestureRecognizers有一个可以访问的视图属性。遍历该视图的超级视图,直到你有UITableViewCell并调用:

[tableView indexPathForCell:cell]; 

应该给你IndexPath。