自定义 UIButton + 子视图 = 无事件

Posted

技术标签:

【中文标题】自定义 UIButton + 子视图 = 无事件【英文标题】:Custom UIButton + subviews = no events 【发布时间】:2010-04-27 21:24:58 【问题描述】:

基本上我有一个自定义 UIButton,这个自定义按钮包含子视图。如果我将这些子视图添加到我的 UIButton,那么按钮将停止响应事件更改。即,如果我点击它,它不会响应选择器。我将所有内容都设置为userInteractionEnabled。我也尝试添加 touchbegan 并且这是有效的。如果我删除这些子视图, UIButton 将再次起作用。

如何从按钮获取点击事件?

【问题讨论】:

【参考方案1】:

子视图应将userInteractionEnabled 设置为NO。这里发生的是子视图正在获取触摸事件而不是 UIButton。如果这不起作用,另一种选择是在您的自定义 UIButton 中覆盖hitTest:withEvent:,以便它始终返回自身并且不询问其子视图是否应该处理该事件。有关详细信息,请参阅UIView docs。

【讨论】:

非常感谢。你是对的,我不应该启用用户交互。 我不知道这让我厌烦了多少次。我一直认为它需要扭转。我现在要去玩蚀刻素描了。 谢谢 - 我的子类按钮 userInteractionEnabled 不起作用,但 hitTest 方法确实: - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event return self;

以上是关于自定义 UIButton + 子视图 = 无事件的主要内容,如果未能解决你的问题,请参考以下文章

Swift:在自定义视图中未调用 UIButton 触摸事件

UIButton 不响应触摸事件

带有 nib 子视图的自定义 UIVIew 无

我的子视图中的 UIButton 不起作用

NSLayoutConstraint 后子视图中的 UIButton 未收到触摸

iOS 子视图、SRP 和自定义事件