当我点击具有自己的处理程序的元素时,为什么委托调用didSelectRowAtIndexPath?

时间:2012-08-16 11:13:17

标签: ios uitableview

我的情况是UITableViewCell子类中的元素有点击手势识别器或UIButtons

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

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

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

2 个答案:

答案 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;

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

不雅,但工作正常。