繁体   English   中英

将选择从UITableViewCell内部传播到UITableView委托

[英]Propagating selection from within UITableViewCell to UITableView delegate

我子类化UITableViewCell并添加手势识别器。 手势识别器之一附加到单元格内容视图的子视图,只有当用户点击该子视图时,才应该“选择”该单元格。 我希望单元格将此选择传播到其包含的表视图,以便调用–[id<UITableViewDelegate> tableView:didSelectRowAtIndexPath:]方法。

几个问题:

  • 从UITableViewCell子类内部,我不知道我位于哪个索引路径(并且除非绝对必要,否则我不希望将其存储为属性)。
  • 从UITableViewCell子类内部,我没有对UITableView的引用,也没有UITableViewDelegate的引用。 (再次,我要避免不必显式声明这些。)
  • 我不想创建自己的委托来检测选择事件,我想使用内置机制(即didSelectRowAtIndexPath:如果可能的话)。
  • 如果我尝试幼稚的方法并在子类上调用self.selected = YES ,则该单元格将突出显示,但不会调用委托的didSelectRowAtIndexPath。

换句话说,有没有办法利用我自己的自定义代码来利用Apple的didSelectRowAtIndexPath :?

正确的解决方案是创建您自己的表单元委托协议(尽管您表示不希望这样做)。

然后,您的表视图控制器可以成为委托。 然后,表视图控制器可以查找单元格的indexPath并调用didSelectRowAtIndexPath委托方法。

这样的优点是您的自定义单元格不在乎事件的处理方式。 它只是告诉其代表发生了什么事。 该单元不需要其表或indexPath的任何知识。

视图控制器负责链接所需的功能。 这是应该做的。 职责分工明确。

要考虑的另一件事是tableView:didSelectRowAtIndexPath:的实现和自定义单元格的委托方法的实现应各自调用一个处理相同逻辑的共享方法。 这比让一个委托方法直接调用另一个委托方法更有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM