我有一个 UIButton
,它作为 View Controller 的 IBOutlet
属性从 xib 文件加载。我将选择器附加到 View Controller 的 viewDidLoad
中的按钮:
[_myButton addTarget:self action:@selector(mySelector) forControlEvents:UIControlEventTouchUpInside];
在 iOS 6 中一切正常,但是当我在 iOS 5.0 中的模拟器上运行时,选择器不会被调用。该按钮在被触摸时会突出显示。
另一件需要注意的事情是,该按钮位于添加了 UITapGestureRecognizer
的 UIView
中。当点击按钮时,此 View 的 UITapGestureRecognizer
在 iOS 5.0 中被调用(它在 iOS 6 中不被调用,而是调用按钮的选择器)。
我没有运行 iOS 5 的设备,所以我没有在设备上进行测试,只在模拟器上进行了测试。
有谁知道这里发生了什么,以及如何解决它?
最佳答案
您已经非常漂亮地解释了问题的原因。在 iOS 5 上,按钮 super View 上的 UITapGestureRecognizer 会干扰按钮的操作。在 iOS 6 上,他们解决了这个问题:他们引入了一个 UIView 事件 gestureRecognizerShouldBegin:
,并且一个按钮会自动为附加到 superview 的点击手势识别器返回 NO。
对于 iOS 5,您需要在点击手势识别器上使用委托(delegate)方法来阻止它识别点击的 View 是否是按钮。
关于ios - UIButton 在 iOS 5 中不调用操作但在 iOS 6 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364272/