UIButton 无法在第一代 iPad 上激活“内部修饰”,可在第二代上使用
Posted
技术标签:
【中文标题】UIButton 无法在第一代 iPad 上激活“内部修饰”,可在第二代上使用【英文标题】:UIButton fails to activate 'touch up inside' on a first gen iPad, works on second gen 【发布时间】:2013-01-31 19:18:11 【问题描述】:问题
我有一个带有UIButton
的.xib。 UIButton
通过Touch Up Inside
连接到文件所有者中的方法- (IBAction)play:(id)sender
。
当我在第一代 iPad 上运行时,UIButton
在点击时会显示为突出显示状态,但不会调用 connected 方法。我在方法的第一行设置了一个断点,它从来没有命中。
当我在第二代 iPad 上运行该应用程序时,一切正常。
我在这个问题上有点盲目,但我希望其他人对可能发生的事情有所了解。知道我忽略了什么吗?
更新,部分解决
感谢 Stavash 的帮助,我发现问题的根源是附加到包含按钮的视图的手势识别器。
当我移除手势识别器时,一切正常。
我看到一个related question,它表示使用UIGestureRecognizerDelegate
来防止手势识别器在点击按钮时响应的解决方案。
但是,即使在点击按钮时委托方法返回 NO
,Touch Up Inside
事件似乎仍然没有触发。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
if ((touch.view == self.playButton))
return NO;
return YES;
取自相关问题的代码,上面链接
我明天再做一些实验,如果我发现哪里出错了再发帖。
【问题讨论】:
您的两台设备的 ios 版本是否完全相同?那里可能会有所不同 您是否在视图控制器中的任何位置使用 UITapGestureRecognizer? @Ismael,不,它们是不同的。第二代iOS6,第一代iOS5。 @Stavash 是的。 .xib 的主视图有一个点击手势识别器,但它似乎也没有被激活。我可以尝试删除它,看看会发生什么。 @Stavash 就是这样,谢谢。我很惊讶我的按钮“下方”的手势识别器阻止它接收触摸事件。我会做更多的阅读,看看如何解决它。 【参考方案1】:很有可能(看起来很奇怪)您在该视图控制器中有一个活动的 UITapGestureRecognizer,它在每个 iOS 版本中的反应都不同。尝试取消手势识别器的任何活动实例,看看它是否有效。
【讨论】:
以上是关于UIButton 无法在第一代 iPad 上激活“内部修饰”,可在第二代上使用的主要内容,如果未能解决你的问题,请参考以下文章
Monotouch - UIActionSheet 无法在 iPad 上正确显示
如何从我的 AIR for iOS 游戏的兼容性中排除第一代 iPad?