UIButton不会在iOS 5中调用动作,但可以在iOS 6中使用

我有一个UIButton作为视图控制器的IBOutlet属性从xib文件加载。 我将一个select器附加到我的视图控制器的viewDidLoad中的button:

 [_myButton addTarget:self action:@selector(mySelector) forControlEvents:UIControlEventTouchUpInside]; 

在iOS 6中一切正常,但是当我在iOS 5.0的模拟器上运行时,select器不会被调用。 触摸时button会突出显示。

另外需要注意的是,该button位于UIView ,并且已经添加了UITapGestureRecognizer 。 这个视图的UITapGestureRecognizer在iOS 5.0中被点击button时调用(它不会在iOS 6中调用,而是调用button的select器)。

我没有运行iOS 5的设备,所以我没有在设备上进行testing,只是模拟器。

有谁知道这里发生了什么,以及如何解决?

你已经非常漂亮地解释了问题的原因。 在iOS 5上,button超级视图上的UITapGestureRecognizer会干扰button的操作。 在iOS 6上,他们解决了这个问题:他们引入了一个UIView事件gestureRecognizerShouldBegin:并且一个button自动返回NO作为连接到超级视图的轻击手势识别器。

对于iOS 5,您需要使用轻击手势识别器上的委托方法来阻止其识别轻击的视图是否为button。

在我的情况下,当用户点击主视图上的任何位置时,我还使用通用的UITapGestureRecognizer来closures由文本字段打开的键盘。

我解决了这个问题,只有在键盘出现时才添加一个手势识别器

- (void)keyboardWillShow:(NSNotification *)n

- (BOOL)textFieldShouldBeginEditing:(VDTextFieldWithError *)textField

然后在隐藏键盘时移除手势识别器(从而移除识别器本身的select器方法中的select器)