我在屏幕的右侧有一个条形按钮,它是ESim
,用于将barButtonSystemItem: .edit
置于编辑模式。我想在用户点击时将其更改为tableView
,并从编辑模式关闭barButtonSystemItem: .done
。
为了清楚起见,每次单击barButton时,应将其类型从“编辑”更改为“完成”。
这是我的代码,但始终处于编辑状态,而不是更改为完成
tableview
答案 0 :(得分:0)
在方法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
}