我有一种情况,UITableViewCell
子类中的元素要么具有轻击手势识别器,要么具有UIButtons
.
当我点击这些时,不仅它的处理程序被调用,而且didSelectRowAtIndexPath:
委托方法也被调用。
现在,理想情况下,如果用户没有点击任何这些元素,则应该将其传递到下面的视图(即表格视图或表格单元格)并进行处理。
为什么这些元素不吞噬触摸并阻止 TableView 委托方法触发?
我有一种情况,UITableViewCell
子类中的元素要么具有轻击手势识别器,要么具有UIButtons
.
当我点击这些时,不仅它的处理程序被调用,而且didSelectRowAtIndexPath:
委托方法也被调用。
现在,理想情况下,如果用户没有点击任何这些元素,则应该将其传递到下面的视图(即表格视图或表格单元格)并进行处理。
为什么这些元素不吞噬触摸并阻止 TableView 委托方法触发?
您需要覆盖以下功能..
-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
在这里,您可以检查触摸是否是从您选择的控件启动的,如果是这种情况,您需要返回 NO 以防止在此处发生默认操作。如果要调用之前定义的处理程序,则返回 YES
-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
if(touch.view == self.playButton ) {
return NO;
}
return YES;
}
我“破解”了一个解决方案,它在我的 UITableViewCell 子类的 contentView 上放置了一个 tapGesture 识别器,其委托是我的自定义 UITableViewController 子类。我使用一个空的 didSelectRowAtIndexPath: 实现。委托方法是
- (void)didSelectTableCell:(MyTableViewCell*)aCell;
这就是工作。只需要记住何时创建单元格以确保我设置了委托。
不优雅,但工作正常。