UITapGestureRecognizer无法在iOS9

时间:2015-06-25 11:25:52

标签: ios xcode uigesturerecognizer xcode7 ios9

我有一个使用UITapGestureRecognizers的应用程序似乎在iOS9 Beta 2中不起作用。

他们成功致电

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
  NSLog(@"shouldReceiveTouch");
  return YES;
}

但它没有触及任何其他UITapGesture委托方法。

当我在iOS 8上运行的设备上运行相同的应用程序(来自Xcode 7)时,它按预期工作。

还有其他人打过这个吗?

以下是我初始化UITapGestureRecognizer的方法。 TapGestureRecognizerSetup

修改
如果我在代码中而不是在ViewController xib中创建UITapGestureRecognizer它可以正常工作,那么iOS9中的xib解析就会出现问题。

_tapGesture2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onMainViewTap:)];
_tapGesture2.numberOfTapsRequired = 1;
_tapGesture2.delegate = self;
[self.view addGestureRecognizer:_tapGesture2];

EDIT2
如果我删除了XIB中的GestureRecognizer并使用XCode 7再次将其添加回来,它也有效。 当我这样做时,它在UITapGestureRecognizer下的xib中添加了<pressTypeMask key="allowedPressTypes"/>

4 个答案:

答案 0 :(得分:3)

似乎iOS9在手势识别器的xml中查找<pressTypeMask key="allowedPressTypes"/>行,如果没有它,则点击识别器无效。 要解决此问题,您可以在代码中构建识别器,将该行添加到xml中,或删除并在Xcode 7中重新添加手势识别器,这将正确地将pressTypeMask添加到xml中。

我想知道苹果是否会修复iOS9而不使用XML中的那一行,但是现在,这是一个简单的解决方法。

答案 1 :(得分:1)

我也遇到了这个问题,特别是当试图获取我的按钮和视图时,在表格单元格中点击手势以响应其布局在xib中定义的点击。在iOS 8和iOS上工作得很好10,但不是9.实际问题是我将这些添加到自定义uiview并将视图的类分配给我的UITableViewCell子类,而不是在IB中使用git push origin develop 对象。因此,我没有将我的子视图添加到IB对象提供给你的Table View Cell,导致我遇到问题。修复是重做xib以使用Table View Cell作为我的根,所以我可以将我的子视图附加到内容视图。

答案 2 :(得分:0)

实现UIGestureRecognizer的所有可选委托将起作用。

答案 3 :(得分:-1)

我通过Xcode-7 beta 2检查了它

我已经使用gesturerecognizer创建了vc并为属性和操作创建了出口。在viewDidload中设置了委托,如下所示: enter image description here

在调试期间调用的所有方法 - 我都标记为//名为

我收到了下一个方法的事件:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
    print("worked")
    // called
    return true
}

 func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool
 {
    //called
    print("worked")
    return true
}


 func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOfGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool
 {
    print("worked")
    //called
    return true
}

尝试按我提到的方式重新创建项目并检查所有商店和代理

希望这有帮助