繁体   English   中英

不会调用iOS11 UIBarButtonItem操作

[英]iOS11 UIBarButtonItem action not get called

我使用Xcode9 Beta6来构建项目,在iOS10设备上正确调用了该操作,但它在iOS11设备上无法正常工作。

在我的项目中,有一些viewControllers顶部有一个UIToolBar,而toolBar包含一些UIBarButtonItems。

有一种这样的viewController,当我点击UIBarButtonItem时,不会调用其UIBarButtonItem动作。 我可以看到点击动画(图标变得暗淡,手指释放后恢复正常)

在结束viewDidLoad ,我打印的信息toolbar.items表明,目标行为是否设置正确。

调试输出

我通过从视图中删除当前手势识别器并添加新手势识别器来解决此问题。 比我打开视图的连接检查器并将gestureRecognizer连接添加到我的手势识别器。

Apple已确认此错误。 我的临时解决方案是通过移除重叠区域来更改手势识别器区域,以便轻击手势不会阻止UIBarButtonItem上的点击事件。

在我的情况下,我正在设置按钮并将其实例化为vc的属性

class myVC: UIViewController {
let closeBarButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(close(_:)))
}

如果我把它移到ViewDidLoad它解决了问题

class myVC: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
    let closeBarButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(close(_:)))
}

}

它仅适用于iOS 11以及用于rightBarButtonItem (或左侧)的自定义UIView 如果您正在使用UIBarButtonItem那么它将正常工作。 此自定义条形项的宽度为0,因此我们需要将其设置为某个值。

在此控制器的viewDidLoad ,您可以添加代码,您可以将100替换为适合您的内容:

if let view = self.navigationItem.rightBarButtonItem?.customView {
    view.widthAnchor.constraint(equalToConstant: 100).isActive = true
}

至少作为一个简单的临时解决方案,它很好。

在我的情况下问题是一个gestureRecognizer添加到整个主视图(为了关闭键盘),如下所示:

UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeKeyboard)];
[self.view addGestureRecognizer:gesture];

该手势识别器会覆盖UIBarButtonItem上的点击,因此我通过创建位于导航栏正下方的新子视图并将手势识别器分配给该视图而不是整个主视图来解决。

使用@objc标记您要定位的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM