swift - UIBarButtonItem 选择器不起作用
问题描述
我在导航控制器中嵌入了一个 MainViewController,如下所示:
在 MainViewController.swift 中,我以编程方式添加了两个 UIBarButtonItem(左和右):
class MainViewController: UIViewController {
let rightButton = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(onRightClick))
let leftButton = UIBarButtonItem(title: "Left", style: .plain, target: self, action: #selector(onLeftClick))
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = rightButton
navigationItem.leftBarButtonItem = leftButton
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@objc func onRightClick() {
print("[Main] Right Click")
}
@objc func onLeftClick() {
print("[Main] Left Click")
}
}
按钮确实显示在屏幕上,但有趣的是,选择器功能onLeftClick
并且onRightClick
在我按下左或右按钮时永远不会被调用。我应该做些什么来让它发挥作用吗?我正在使用 Xcode 9.3。
解决方案
尝试使用内部范围一次
override func viewDidLoad() {
super.viewDidLoad()
let rightButton = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(self.onRightLeftClick(_ :)))
rightButton.tag = 1
let leftButton = UIBarButtonItem(title: "Left", style: .plain, target: self, action: #selector(self.onRightLeftClick(_ :)))
rightButton.tag = 2
self.navigationItem.rightBarButtonItem = rightButton
self.navigationItem.leftBarButtonItem = leftButton
}
将动作处理为
func onRightLeftClick(_ sender: UIBarButtonItem){
if sender.tag == 1{
// rightButton action
}else{
// leftButton action
}
}
推荐阅读
- php - php stdobject - 调用默认函数
- javascript - hasOwnProperty not working in array of objects, combining objects
- r - 如何将日期和时间转换为R中的数值
- ruby-on-rails - Rails 5 - 重定向时保留 :js 格式
- mysql - 如何将 sql server 连接到 app.js 文件?
- c# - 如何使用 Entity Framework .SqlQuery 以便它可以同时被多个客户端使用?
- google-cloud-platform - 在本地运行 ESP 时出现 Cloud Endpoints 错误
- c# - Veracode ASP.NET C# Response.Redirect 解决方案
- python - 如何在散景中使用悬停文本填充 div?
- c - 为什么我的二进制输出与预期输出不同?