如何在 prepareForSegue 中的 UITapGestureRecognizer 中点击并捕获其中的 UIImage 时如何获取自定义 table 视图单元格的索引路径

How to get the indexpath of a custom table view cell when an UIImage inside of it is tapped and captured by UITapGestureRecognizer in prepareForSegue

好的,标题中有很多变数,抱歉,我不能再简单了。

首先,我有一个自定义 table 单元格,其描述如下

现在,当用户点击单元格本身时,它会转到视图 A, 但是,有一个 UITapGestureRecognizer 连接到左侧的 UIImage,它连接到转到视图 B 的 segue。

一切都很好,但我需要 table 视图单元格中的一些数据,我可以将这些数据传递给视图 B,以便在显示视图后它可以做一些事情。

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if(segue.identifier == "toViewA") {

    }else if( segue.identifier == "toViewBFromThatImage" ){

        let viewBVC = ( segue.destinationViewController as! viewBVC )
        ///////sender is UITapGestureRecognizer 
        ///////somehow want to get indexpath here

         viewBVC.selectedIndex = SOMEHOW DIRREVED INDEXPATH
    }
}

也许我应该在初始化时设置一些东西作为 UIImage 的标签或手势 object?或者我应该避免首先在 prepareForSegue 中尝试这样做吗?

对此还是个新手,非常感谢任何建议。

我建议将 segue 放在 table 视图单元格中是错误的地方。它属于视图控制器,在视图控制器上调用委托方法来执行它。

在你的单元子类中声明一个协议 -

protocol MyCustomCellDelegate {
    func imageTappedInCell(cell:MyCustomCell)
}

然后声明一个 delegate 属性 并在你的手势识别器中使用它 -

class MyCustomCell {

    weak var delegate : MyCustomCellDelegate?

    ...

   func imageTapped(recognizer:UIGestureRecognizer) {

       if (recognizer.state == .Ended) {
           delegate?.imageTapped(self)
       }

   }

然后在您的视图控制器中您可以实现委托方法。在委托方法中可以使用单元格来标识索引路径

 class MyTableViewController: UIViewController,MyCustomCellDelegate {


     func imageTapped(cell:MyCustomCell) {
         self.performSegueWithIdentifier("toViewBFromThatImage",sender:cell)
     }

     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if( segue.identifier == "toViewBFromThatImage" ){
            let viewBVC = ( segue.destinationViewController as! viewBVC )
            let senderCell=sender as! MyCustomCell
            viewBVC.selectedIndex = self.tableview.indexPathForCell(senderCell)!
        }
    }
}