如何使 UIBarButtonItem 在按下时执行功能?
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 post:Execute action when back bar button of UINavigationController is pressed
我也试过把它变成navigationItem.backBarButtonItem
;但是,似乎没有任何效果。有些东西显示正确的自定义图像,但不能用作按钮;另一方面,有些用作按钮,但不显示正确的图像。
有谁知道如何显示正确的图像并使项目作为按钮使用?谢谢
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
会更容易。
按如下操作:
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 - adding target and action to BarButtonItem's customView
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 }
看看这个,可能会有帮助谢谢。
我正在尝试使用此代码制作自定义后退按钮:
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 post:Execute action when back bar button of UINavigationController is pressed
我也试过把它变成navigationItem.backBarButtonItem
;但是,似乎没有任何效果。有些东西显示正确的自定义图像,但不能用作按钮;另一方面,有些用作按钮,但不显示正确的图像。
有谁知道如何显示正确的图像并使项目作为按钮使用?谢谢
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
会更容易。
按如下操作:
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 - adding target and action to BarButtonItem's customView
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 }
看看这个,可能会有帮助谢谢。