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 来防止手势识别器在点击按钮时响应的解决方案。

但是,即使在点击按钮时委托方法返回 NOTouch 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?

iOS 13.6出现新漏洞﹨下一代iPad Air配置升级更便宜﹨苹果申请Apple Pencil专利

Swift - UIButton 没有固定在屏幕底部

解决clion无法激活

Webapp 在 ipad air 上无法正确显示