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 作为我的根,这样我就可以将我的子视图附加到内容视图。
我有一个使用 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 作为我的根,这样我就可以将我的子视图附加到内容视图。