我正在尝试使用此代码创建自定义后退按钮:
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帖子:Execute action when back bar button of UINavigationController is pressed
我也试过把它变成navigationItem.backBarButtonItem
;然而,似乎没有任何作用。有些东西显示正确的自定义图像,但不作为按钮工作;另一方面,有些工作作为按钮,但没有显示正确的图像。
有人知道如何显示正确的图像并使该项目作为按钮工作吗?感谢。
答案 0 :(得分:1)
按如下方式进行:
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
答案 1 :(得分:1)
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 }
看看这个,可能会有所帮助。
答案 2 :(得分:0)
Swift 4.1
问题是UIImage没有点击识别。您必须在后视图中添加点击手势识别器。
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)
}
如果你展示你的代码,有了一些屏幕截图,我可以提供更多帮助,如果这不能解决问题。
答案 3 :(得分:0)
您正在错误地创建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
会更容易。