点击后更改barButtonSystemItem

时间:2019-05-31 01:54:17

标签: swift uibarbuttonitem rightbarbuttonitem

我在屏幕的右侧有一个条形按钮,它是ESim,用于将barButtonSystemItem: .edit置于编辑模式。我想在用户点击时将其更改为tableView,并从编辑模式关闭barButtonSystemItem: .done。 为了清楚起见,每次单击barButton时,应将其类型从“编辑”更改为“完成”。

这是我的代码,但始终处于编辑状态,而不是更改为完成

tableview

1 个答案:

答案 0 :(得分:0)

在方法editButtonActioneditButtonAction的主体中,您只能通过执行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
}