我有一个自定义 UIButton,其中 UILabel 添加为子视图。仅当我触摸顶部边界下方约 15 个点时,按钮才会执行给定的选择器。当我点击该区域上方时,什么也没有发生。
我发现这并不是由错误创建按钮和标签引起的,因为在我将按钮向下移动约 15 px 后,它可以正常工作。
UPDATE我忘了说位于 UINavigationBar 下方的按钮和按钮上部的 1/3 不会收到触摸事件。
图片在这里 http://www.picamatic.com/show/2012/03/13/09/59/8282746_640x130.png
带有 4 个按钮的视图位于导航栏下方。当触摸顶部的“篮球”时,后退按钮获得触摸事件,当触摸顶部的“钢琴”时,右栏按钮(如果存在)获得触摸。如果不存在,则什么也没有发生。
我在应用程序文档中没有找到此记录功能。
我还发现this https://stackoverflow.com/questions/7806557/touch-events-within-8-pixels-of-nav-bar-not-called主题与我的问题相关,但也没有答案。
我注意到,如果您将 userInteractionEnabled 设置为 OFF,导航栏将不再“窃取”触摸。
因此,您必须对 UINavigationBar 进行子类化,并在 CustomNavigationBar 中执行以下操作:
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if ([self pointInside:point withEvent:event]) {
self.userInteractionEnabled = YES;
} else {
self.userInteractionEnabled = NO;
}
return [super hitTest:point withEvent:event];
}
您可以找到有关如何子类化 UINavigationBar 的信息here https://stackoverflow.com/questions/6672229/how-to-subclass-uinavigationbar-for-a-uinavigationcontroller-programatically.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)