состояние кнопки панели навигации xcode

#swift #xcode #button #state

#swift #xcode #кнопка #состояние

Вопрос:

У меня есть кнопка редактирования — UIBarButtonItem

введите описание изображения здесь

которая исчезает с экрана при нажатии

введите описание изображения здесь

и появляется при нажатии кнопки отмены

введите описание изображения здесь

Как вы можете видеть, состояние кнопки редактирования остается выбранным после появления. Как я могу программно изменить состояние кнопок панели навигации на обычное состояние? Или предложите мне лучший способ.

вот код моего проекта

 class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, introductionDelegate {

var navBarEditButton: UIBarButtonItem?
var navBarDeleteButton: UIBarButtonItem?
var navBarCancelButton: UIBarButtonItem?

override func viewDidLoad() {
    super.viewDidLoad()
    self.navBarEditButton = UIBarButtonItem(title: "Edit", style: .plain, target: self, action: #selector(editObjectsAction))
    self.navBarDeleteButton = UIBarButtonItem(title: "Delete", style: .plain, target: self, action: #selector(deleteObjectsAction))
    self.navBarCancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelAction))

    self.navigationItem.leftBarButtonItems = [navBarEditButton!]
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@objc private func editObjectsAction(_ sender: UIBarButtonItem) {
    self.navigationItem.leftBarButtonItems = [navBarCancelButton!, navBarDeleteButton!]
}

@objc private func cancelAction(_ sender: UIBarButtonItem) {
    self.navigationItem.leftBarButtonItems = [navBarEditButton!]
}

@objc private func deleteObjectsAction(_ sender: UIBarButtonItem) {

}
  

Комментарии:

1. Приведенный выше код выглядит нормально. На каком устройстве вы тестируете? пожалуйста, проверьте наличие navBarEditButton во всей остальной части кода. возможно, вы отключаете ее в какой-то другой момент.

2. Тестирование на iPhone 8, и в целом коде navBarEditButton встречается только четыре раза.

3. хорошо, я просто хотел убедиться в отключенном состоянии из другой части, но в вашем случае это не было причиной.

Ответ №1:

вы можете создавать, UIBarButtonItem используя UIButton , состояние этой кнопки и обрабатывать его. При этом вы меняете стиль UIBarButtonItem, но просто проверяете, получаете ли вы желаемый результат.

 let myButton = UIButton(frame: CGRect(x: 10, y: 300, width: 100, height: 40)) // handle state on this button
self.navBarEditButton = UIBarButtonItem(customView: myButton)
  

Ответ №2:

Я добавил новую функцию

 func refreshNavBarButton (navBarButton: inout UIBarButtonItem) {
    navBarButton = UIBarButtonItem(title: navBarButton.title, style: navBarButton.style, target: navBarButton.target, action: navBarButton.action)
}
  

И я вызываю это каждый раз перед отображением кнопки панели навигации

     refreshNavBarButton(navBarButton: amp;navBarEditButton!)
    self.navigationItem.leftBarButtonItems = [navBarEditButton!]