【问题标题】:iphone - perform segue from custom TableCellViewiphone - 从自定义 TableCellView 执行 segue
【发布时间】:2014-03-13 18:43:12
【问题描述】:

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

有没有什么方法可以在单击图片时执行某种转场,但是当我单击每个标签时,它会执行不同的转场。我只希望在单击 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];

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

我确信必须有一个简单的方法来做到这一点

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

【问题讨论】:

    标签: ios iphone objective-c uitableview


    【解决方案1】:

    您可以通过将以下添加到点击处理程序doSomething: 来获取单元格myImage 所属的NSIndexPath

    - (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];
        }
    }
    

    【讨论】:

    • 在哪里添加此代码? singleTap 触发的方法没有定义事件标识符,所以 UITouch *touch = [[event allTouches] anyObject];失败。
    • 哇,太好了,谢谢!!我的 doSomething 方法现在具有所选 tableCell 的 indexPath。我有什么办法可以将它传递给 prepareForSegue 方法或以编程方式触发 didSelectRowAtIndexPath 以便使用正确的 indexPath 执行 segue?
    • 非常感谢您的帮助,我已经用两个额外的行更新了您的答案,这些行显示了如何从 doSomething 方法触发 didSelectRowAtIndexPath 方法。
    【解决方案2】:

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

    [tableView indexPathForCell:cell];
    

    这应该会给你 IndexPath。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多