Измените barButtonSystemItem после нажатия - PullRequest
0 голосов
/ 31 мая 2019

У меня есть кнопка в правой части экрана, это 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
}

1 Ответ

0 голосов
/ 31 мая 2019

В телах методов 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
}
...