Ios 添加自定义视图不工作的UIBarButtonim目标 你好,
我在向UIBarButtonItem添加自定义操作时遇到问题Ios 添加自定义视图不工作的UIBarButtonim目标 你好,,ios,swift,xcode,Ios,Swift,Xcode,我在向UIBarButtonItem添加自定义操作时遇到问题 目标未调用 有人看到问题了吗 let navBarMapImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 22, height: 22)) navBarMapImageView.contentMode = .scaleAspectFit navBarMapImageView.image = image navBarMapImageView.
目标未调用
有人看到问题了吗
let navBarMapImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 22, height: 22))
navBarMapImageView.contentMode = .scaleAspectFit
navBarMapImageView.image = image
navBarMapImageView.isUserInteractionEnabled = true
navBarMapImageView.target(forAction: #selector(openMaps), withSender: self)
let navBarMapButton = UIBarButtonItem(customView: navBarMapImageView)
感谢您的帮助您正在将目标添加到
UIImageView
,它不工作,请检查下面的代码
let btn1 = UIButton(type: .custom)
btn1.setImage(UIImage(named: "imagename"), for: .normal)
btn1.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
btn1.addTarget(self, action: #selector(openMaps), for: .touchUpInside)
let item1 = UIBarButtonItem(customView: btn1)
self.navigationItem.setRightBarButtonItems([item1], animated: true)
为什么不使用UIButton并按照此线程中的建议将其指定为bar button项:
将目标设置为
navBarMapButton
,而不是navBarMapImageView
我想添加不同的方法
您可以创建一些自定义栏项目类,并为customView编写特定的初始值设定项。比如,
fileprivate class BarButtonItem: UIBarButtonItem {
@objc func buttonAction()
override init() {
super.init()
}
convenience init(customView: UIControl) {
self.init()
self.customView = customView
customView.addTarget(self, action: .onBarButtonAction, for: .touchUpInside)
}
fileprivate extension Selector {
static let onBarButtonAction = #selector(BarButtonItem.buttonAction)
}
通过这种方式,你甚至可以在你的按钮动作中添加闭包
var actionCallback: ( () -> Void )?
@objc func buttonAction() {
actionCallback?()
}
为什么要使用UIImageView,而不是使用UIButton。是的,好问题,我不知道为什么使用按钮肯定是更好的方法:-因为UIImageView不是控件,所以不能向其中添加控件事件的目标。
var actionCallback: ( () -> Void )?
@objc func buttonAction() {
actionCallback?()
}