如果子按钮被禁用,则停止将事件传递给父按钮

Posted

技术标签:

【中文标题】如果子按钮被禁用,则停止将事件传递给父按钮【英文标题】:If child button is disabled then stop passing event to parent 【发布时间】:2015-03-23 09:36:55 【问题描述】:

我在UITableViewCell 上有一个UIButton 如果我设置了

button.enabled = false;

...然后对该按钮的后续点击触发点击UITableViewCell

如果按钮被禁用,那么如何确保点击它不会触发表格单元格点击?

【问题讨论】:

【参考方案1】:

你可以这样做

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

     if(!cell.btn.enable)
        return;

【讨论】:

表格单元格应保持可点击状态。如果单元格上的按钮启用,则调用已售出的操作,如果禁用,则不会发生任何事情。如果用户单击单元格上的其他任何位置,则应该调用正常的选择委托 就像我说的 - 这将在不同的层面上处理事件【参考方案2】:

一种方法是不禁用按钮,而只是认识到相关按钮目前不会响应触摸事件并且什么都不做 在此按钮的处理程序中。

if( buttonIsActive )

  // trigger whatever the button was intended to trigger

为此,您需要继承 UIButton 并添加属性 buttonIsActive

如果你不那样做,我想你将不得不在不同的层次上处理那个事件(比如在 UITableViewCell 的处理程序中)或者完全转向手势识别(也就是选择)(参见 Praful Kadam 的回答)。

【讨论】:

以上是关于如果子按钮被禁用,则停止将事件传递给父按钮的主要内容,如果未能解决你的问题,请参考以下文章

将子控件的点击事件传递给父控件

在ReactJS中使用迭代时如何将onClick事件传递给父组件?

当按钮被禁用然后点击事件调用

Qt - 暂时禁用所有事件或窗口功能?

如何在 Swift 中将触摸事件发送到 nextResponder

QT父子窗口事件传递与事件过滤器(讲了一些原理,比较清楚)