[英]How to make a UIBarButtonItem perform a function when pressed?
我正在嘗試使用此代碼創建自定義后退按鈕:
let back = UIImage(named: "header_backarrow")
let backView = UIImageView(image: back)
let backItem = UIBarButtonItem(customView: backView)
navigationItem.leftBarButtonItem = backItem
我希望導航項執行此代碼:
func dismissManual() {
dismiss(animated: true, completion: nil)
}
我已經嘗試過很多東西,例如關注這個Stack Overflow帖子: 當按下UINavigationController的后欄按鈕時執行動作
我也試過把它變成一個navigationItem.backBarButtonItem
; 然而,似乎沒有任何作用。 有些東西顯示正確的自定義圖像,但不作為按鈕工作; 另一方面,有些工作作為按鈕,但沒有顯示正確的圖像。
有人知道如何顯示正確的圖像並使項目作為按鈕工作嗎? 謝謝。
做到如下:
override func viewDidLoad() {
super.viewDidLoad()
let back = UIImage(named: "header_backarrow")
let backView = UIImageView(image: back)
backView.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(dismissManual))
backView.addGestureRecognizer(tap)
let backItem = UIBarButtonItem(customView: backView)
navigationItem.leftBarButtonItem = backItem
}
@objc func dismissManual() {
print("print----")
// dismiss(animated: true, completion: nil)
}
添加手勢到backView它將工作! 這個問題類似IOS - Swift - 向BarButtonItem的customView添加目標和動作
Swift 4.1
問題是UIImage沒有輕敲識別。 您必須在backView中添加一個點擊手勢識別器。
lazy var singleTap: UITapGestureRecognizer = {
let singleTap = UITapGestureRecognizer(target: self, action: #selector(tapDetected))
singleTap.numberOfTapsRequired = 1
return singleTap
}()
// Actions
@objc func tapDetected() {
dismiss(animated: true, completion: nil)
}
如果你展示你的代碼,通過一些屏幕截圖我可以提供更多的幫助,如果這不能解決問題。
您正在錯誤地創建UIBarButtonItem
。 您不需要圖像視圖。
做到如下:
let back = UIImage(named: "header_backarrow")
let backItem = UIBarButtonItem(image: back, style: .plain, target: self, action: #selector(dismissManual))
navigationItem.leftBarButtonItem = backItem
@objc func dismissManual() {
dismiss(animated: true, completion: nil)
}
請注意,該函數必須用@objc
標記。
根據您的圖像以及您希望的顯示方式,您可能需要按如下方式創建圖像:
let back = UIImage(named: "header_backarrow").withRenderingMode(.alwaysOriginal)
另一種選擇是使用圖像和設置創建一個UIButton
來調用你的dismissManual
函數。 使用按鈕作為自定義視圖創建UIBarButtonItem
。
但是當你擁有的只是一個簡單的圖像或一個簡單的字符串時,創建一個標准的UIBarButtonItem
更容易。
let barButtonItem = UIBarButtonItem(image: UIImage(named: "backImgs"),
style: .plain,
target: self,
action: #selector(menuButtonTapped))
// Adding button to navigation bar (rightBarButtonItem or leftBarButtonItem)
self.navigationItem.rightBarButtonItem = barButtonItem
// Private action
@objc fileprivate func menuButtonTapped() { // body method here }
看看這個,它可能會有所幫助謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.