如何在 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)!
}
}
}
好的,标题中有很多变数,抱歉,我不能再简单了。
首先,我有一个自定义 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)!
}
}
}