我正在为UITableViewCell创建子类并为其添加手势识别器。其中一个手势识别器附加到单元格内容视图的子视图,并且只有当用户点击此子视图时才应该“选择”该单元。我希望单元格将此选择传播到其包含的表视图,以便调用–[id<UITableViewDelegate> tableView:didSelectRowAtIndexPath:]
方法。
几个问题:
self.selected = YES
,则单元格会突出显示,但不调用委托的didSelectRowAtIndexPath。换句话说,有没有办法从我自己的自定义代码中利用Apple的didSelectRowAtIndexPath:
答案 0 :(得分:1)
正确的解决方案是创建自己的表格单元委托协议(尽管你说你不想要那样)。
然后您的表视图控制器可以是委托。然后表视图控制器可以查找单元格的indexPath并调用didSelectRowAtIndexPath
委托方法。
这样做的好处是,您的自定义单元格并不关心事件的处理方式。它只是告诉其代表发生了什么事。该单元格不需要任何关于其表或indexPath的知识。
您的视图控制器可以链接您所需的功能。这是应该怎么做的。清洁职责分离。
另一件需要考虑的事情是tableView:didSelectRowAtIndexPath:
的实现和自定义单元的委托方法的实现应该分别调用处理相同逻辑的共享方法。这比让一个委托方法直接调用另一个委托方法更有意义。