0

我有一种情况,UITableViewCell子类中的元素要么具有轻击手势识别器,要么具有UIButtons.

当我点击这些时,不仅它的处理程序被调用,而且didSelectRowAtIndexPath:委托方法也被调用。

现在,理想情况下,如果用户没有点击任何这些元素,则应该将其传递到下面的视图(即表格视图或表格单元格)并进行处理。

为什么这些元素不吞噬触摸并阻止 TableView 委托方法触发?

4

2 回答 2

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;
}
于 2012-08-16T11:27:21.053 回答
0

我“破解”了一个解决方案,它在我的 UITableViewCell 子类的 contentView 上放置了一个 tapGesture 识别器,其委托是我的自定义 UITableViewController 子类。我使用一个空的 didSelectRowAtIndexPath: 实现。委托方法是

- (void)didSelectTableCell:(MyTableViewCell*)aCell;

这就是工作。只需要记住何时创建单元格以确保我设置了委托。

不优雅,但工作正常。

于 2012-08-21T15:05:31.520 回答