点击后更改 barButtonSystemItem
Change barButtonSystemItem after tapping
我在屏幕右侧有一个条形按钮,它是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.isEditing = !tableView.isEditing
来更改 tableView
编辑状态。此操作对 navigationItem
没有任何影响。
我建议您通过将 addBarButton
重命名为 updateBarButton
来稍微重构代码,并在每次 table
编辑状态更改时调用它,另外从 [=19] =] 就像你现在做的那样。所以你的代码会变成这样:
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
}
我在屏幕右侧有一个条形按钮,它是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.isEditing = !tableView.isEditing
来更改 tableView
编辑状态。此操作对 navigationItem
没有任何影响。
我建议您通过将 addBarButton
重命名为 updateBarButton
来稍微重构代码,并在每次 table
编辑状态更改时调用它,另外从 [=19] =] 就像你现在做的那样。所以你的代码会变成这样:
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
}