#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!]