首页 > 解决方案 > 点击后更改 barButtonSystemItem

问题描述

我在屏幕右侧有一个条形按钮,barButtonSystemItem: .edit它用于进入tableView编辑模式。我想要什么时候,用户点击它,它会变成barButtonSystemItem: .donetableview从编辑模式关闭。为了清楚起见,每次单击 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
}

标签: swiftuibarbuttonitemrightbarbuttonitem

解决方案


在方法的主体中editButtonActioneditButtonAction您只需通过执行更改tableView编辑状态tableView.isEditing = !tableView.isEditing。这个动作根本没有任何作用navigationItem

我建议您通过重命名来重构代码,addBarButtonupdateBarButton在每次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
}

推荐阅读