UIButton 不响应触摸事件
Posted
技术标签:
【中文标题】UIButton 不响应触摸事件【英文标题】:UIButton do not respond to touch event 【发布时间】:2019-07-04 16:00:53 【问题描述】:我有一个 UIButton 没有响应触摸事件。而且该按钮只有一些不处理事件的子视图。所以我用我自定义的 UIButton 替换它以找出发生了什么。以下是我的代码:
@interface CustomButton : UIButton
@end
@implementation CustomButton
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
[super touchesBegan:touches withEvent:event];
-(BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
return [super beginTrackingWithTouch:touch withEvent:event];
@end
我发现touchesBegan:withEvent:
方法被调用,但beginTrackingWithTouch:withEvent:
从未被调用。似乎该事件已发送到我的按钮,但我不明白为什么从未跟踪过该事件。任何线索将不胜感激。
【问题讨论】:
我发现touchesBegan:withEvent:方法被调用了,但是touchesBegan:withEvent:从来没有被调用过。--是哪个? @7stud 抱歉,我已经修正了我的错字。 :) 【参考方案1】:禁用按钮上方未侦听事件的视图的用户交互。检查按钮是否启用了用户交互。检查UIButton
的帧大小,并确保在以编程方式使用自动布局时它不为零。
【讨论】:
禁用按钮上方视图的用户交互解决了我的问题。但是让我感到困惑的一件事是子视图正在将触摸事件转发到按钮,但为什么它无法识别?我试验了 hitTest 方法,发现如果禁用上面的视图,hitTest 视图将是按钮,如果没有,它将是上面的视图。似乎是有区别的。即使 hitTest 视图不是按钮,作为 UIView 和响应者链的默认行为,事件也会正确地转发到按钮。按钮的 touch 方法被调用可以证明这一切。 总之,我的问题是为什么 UIButton 不跟踪子视图转发给它的触摸事件?是这样指定的,还是bug?以上是关于UIButton 不响应触摸事件的主要内容,如果未能解决你的问题,请参考以下文章
UIButton ImageView 在 iCarousel 中占用更多空间并且不响应触摸事件
如果 UIButton 的位置超出其父视图但它是可见的,它可以响应触摸事件吗?
尽管 userInteractionEnabled = true,但 UIView 中的 UIButton 没有响应触摸事件