【问题标题】:UIButton not calling action in iOS 5 but works in iOS 6UIButton 在 iOS 5 中不调用操作,但在 iOS 6 中有效
【发布时间】:2012-12-31 02:49:55
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: ios ios5 ios6 uibutton uicontrol


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    在我的例子中,当用户点击主视图上的任意位置时,我还使用通用 UITapGestureRecognizer 来关闭由文本字段打开的键盘。

    我通过仅在键盘出现时添加手势识别器来解决此问题(请参阅

    - (void)keyboardWillShow:(NSNotification *)n

    - (BOOL)textFieldShouldBeginEditing:(VDTextFieldWithError *)textField)

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

    【讨论】:

      猜你喜欢
      • 2013-05-29
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多