我的情况是UITableViewCell
子类中的元素有点击手势识别器或UIButtons
。
当我点击它们时,不仅会调用它的处理程序,而且didSelectRowAtIndexPath:
委托方法也会被调用。
现在,理想情况下,如果用户没有点击任何这些元素,则应将其传递到下面的视图(即tableview或table单元格)并进行处理。
为什么这些元素不会吞噬触摸并阻止TableView委托方法触发?
答案 0 :(得分:0)
您需要覆盖以下功能..
-(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;
}
答案 1 :(得分:0)
我“破解”了一个解决方案,它将tapGesture识别器放在我的UITableViewCell子类的contentView上,其委托是我的自定义UITableViewController子类。我使用一个空的didSelectRowAtIndexPath:实现。委托方法是
- (void)didSelectTableCell:(MyTableViewCell*)aCell;
这就完成了工作。只需要记住创建单元格的时间以确保我设置委托。
不雅,但工作正常。