UITapGestureRecognizer 无法在 iOS9 上工作

UITapGestureRecognizer not working on iOS9

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

他们正在成功调用

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

但它没有命中任何其他 UITapGesture 委托方法。

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

还有人打这个吗?

下面是我如何初始化 UITapGestureRecognizer。

编辑
如果我在代码中而不是在 ViewController xib 中创建 UITapGestureRecognizer,它工作正常,所以在 iOS9 或其他东西中的 xib 解析有问题。

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

编辑2
如果我删除了 XIB 中的 GestureRecognizer 并使用 XCode 7 将其重新添加回来,它也能正常工作。 当我这样做时,它在 UITapGestureRecognizer 下的 xib 中添加了 <pressTypeMask key="allowedPressTypes"/>

我通过 Xcode-7 beta 2

检查过

我已经使用 gesturerecognizer 创建了 vc,并为 属性 和动作创建了出口。在 viewDidload 设置委托中,像这样:

调试期间调用的所有方法 - 我已标记 //called

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

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
}

尝试像我提到的那样重新创建项目并检查你所有的出口和委托

希望对您有所帮助

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

我想知道 Apple 是否会修复 iOS9 以在 XML 中没有该行的情况下工作,但就目前而言,这是一个简单的修复。

实现 UIGestureRecognizer 的所有可选委托都可以。

我 运行 也遇到了这个问题,特别是当我试图在 table 单元格中使用点击手势获取我的按钮和视图以响应布局在 a 中定义的点击时xib。在 iOS 8 和 10 上运行良好,但在 9 上运行良好。实际问题是我将它们添加到自定义 uiview 并将视图的 class 分配给了我的 UITableViewCell subclass,而不是在 IB 中使用 Table View Cell 对象。因此,我没有将我的子视图添加到 IB 对象给你的 contentView 中,这导致了我的问题。修复是重做 xib 以使用 Table View Cell 作为我的根,这样我就可以将我的子视图附加到内容视图。