[英]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.