【问题标题】:Why does the delegate call didSelectRowAtIndexPath when I tap an element that has its own handler?为什么当我点击具有自己处理程序的元素时,委托调用 didSelectRowAtIndexPath?
【发布时间】:2012-08-16 11:13:16
【问题描述】:

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

当我点击这些时,不仅会调用其处理程序,还会调用didSelectRowAtIndexPath: 委托方法。

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

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

【问题讨论】:

    标签: ios uitableview


    【解决方案1】:

    你需要重写以下函数..

    -(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 子类接收触摸
    【解决方案2】:

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

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

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

    不优雅,但工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 2013-08-01
      • 2020-01-31
      • 1970-01-01
      相关资源
      最近更新 更多