我有一个UIButton
从xib文件加载为视图控制器的IBOutlet
属性。我将一个选择器附加到我的视图控制器viewDidLoad
中的按钮:
[_myButton addTarget:self action:@selector(mySelector) forControlEvents:UIControlEventTouchUpInside];
在iOS 6中一切正常,但是当我在iOS 5.0中的模拟器上运行时,选择器不会被调用。触摸时按钮会突出显示。
需要注意的另一件事是该按钮位于UIView
中,并添加了UITapGestureRecognizer
。当点击按钮时,在iOS 5.0中调用此视图的UITapGestureRecognizer
(在iOS 6中不会调用它,而是调用按钮的选择器)。
我没有运行iOS 5的设备,所以我没有在设备上测试,只是模拟器。
有谁知道这里发生了什么,以及如何解决它?
答案 0 :(得分:24)
您已经非常精确地解释了问题的原因。在iOS 5上,按钮的超视图上的UITapGestureRecognizer会干扰按钮的操作。在iOS 6上,他们修复了这个问题:他们引入了一个UIView事件gestureRecognizerShouldBegin:
,并且一个按钮会自动为附加到超级视图的点击手势识别器返回NO。
对于iOS 5,您需要在点击手势识别器上使用委托方法,以阻止它识别点按的视图是否为按钮。
答案 1 :(得分:0)
在我的情况下,当用户点按主视图上的任意位置时,我还使用通用UITapGestureRecognizer
来解除由文本字段打开的键盘。
我通过仅在键盘出现时添加手势识别器来修复此问题(参见
- (void)keyboardWillShow:(NSNotification *)n
或
- (BOOL)textFieldShouldBeginEditing:(VDTextFieldWithError *)textField
)
然后在隐藏键盘时删除手势识别器(从而在识别器本身的选择器方法中删除选择器)