swift - 点击后更改 barButtonSystemItem
问题描述
我在屏幕右侧有一个条形按钮,barButtonSystemItem: .edit
它用于进入tableView
编辑模式。我想要什么时候,用户点击它,它会变成barButtonSystemItem: .done
并tableview
从编辑模式关闭。为了清楚起见,每次单击 barButton 时,它的类型都应该从编辑更改为完成。
这是我的代码,但它始终保持编辑状态,而不是更改为完成
fileprivate func addBarButton() {
if tableView.isEditing {
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(editButtonAction))
} else {
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .edit, target: self, action: #selector(doneButtonAction))
}
}
@objc func editButtonAction(sender: UIBarButtonItem) {
tableView.isEditing = !tableView.isEditing
}
@objc func doneButtonAction(sender: UIBarButtonItem) {
tableView.isEditing = !tableView.isEditing
}
override func viewDidLoad() {
super.viewDidLoad()
addBarButton()
tableView?.isEditing = true
}
解决方案
在方法的主体中editButtonAction
,editButtonAction
您只需通过执行更改tableView
编辑状态tableView.isEditing = !tableView.isEditing
。这个动作根本没有任何作用navigationItem
。
我建议您通过重命名来重构代码,addBarButton
并updateBarButton
在每次table
编辑状态发生变化时调用它,另外viewDidLoad
就像现在一样。所以你的代码会变成这样:
fileprivate func updateBarButton() {
if tableView.isEditing {
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(editButtonAction))
} else {
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .edit, target: self, action: #selector(doneButtonAction))
}
}
@objc func editButtonAction(sender: UIBarButtonItem) {
tableView.isEditing = !tableView.isEditing
updateBarButton() // Note the additional call of the update method
}
@objc func doneButtonAction(sender: UIBarButtonItem) {
tableView.isEditing = !tableView.isEditing
updateBarButton() // Note the additional call of the update method
}
override func viewDidLoad() {
super.viewDidLoad()
tableView?.isEditing = true
updateBarButton() // Note that we call this method after changing the table view state so that it will have the most recent value
}
推荐阅读
- sql - sql oracle:当类型不存在时获取空值
- c# - 找不到非核心应用程序的模块“AspNetCoreModule”
- css - MacOS Chrome 水平滚动条没有消失
- java - Spring Security 和 Oauth2 的误区
- c# - 具体如果条件评估不正确
- dart - Flutter - 使用 package_info 在 iOS 中获取应用程序版本
- javascript - 将具有相同值的键相乘
- java - 从 Java 8 更新到 OpenJdk 11.0.2 时 intellij maven 中出现错误“找不到 zip END 标头”
- vue.js - 在 vuejs 中将路由前附加到模板
- java - 将项目转换为 Maven 后图像消失了