2013-01-16 63 views
20

我有一个UIButton,它是从xib文件加载的,作为视图控制器的IBOutlet属性。我在我的视图控制器的viewDidLoad选择附加到按钮:UIButton不在iOS 5中调用操作,但在iOS 6中工作

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

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

另一件需要注意的是,该按钮位于UIView中,其中添加了UITapGestureRecognizer。这个视图的UITapGestureRecognizer在iOS 5.0中被点击按钮时调用(它不会在iOS 6中调用,而是调用按钮的选择器)。

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

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

回答

24

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

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

+0

感谢您的解释。我会尝试解决方案。 – Darren

+2

此答案包含代码:http://stackoverflow.com/questions/13515539/uibutton-not-works-in-ios-5-x-everything-is-fine-in-ios-6-x –

0

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

我通过当键盘显示了只添加一个手势识别固定设置(参见

- (void)keyboardWillShow:(NSNotification *)n

- (BOOL)textFieldShouldBeginEditing:(VDTextFieldWithError *)textField

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

相关问题