У меня есть текстовое поле в моем контроллере просмотра, и я хочу отобразить пользовательское название для кнопки «Назад». Это должно представлять изменения, внесенные в текстовое поле.Заголовок кнопки UINavigationController не обновляется динамически
override func viewDidLoad() {
super.viewDidLoad()
// Update back button in the nav bar
updateBackButton()
// Text field delegation
nameTextField.delegate = self
nameTextField.addTarget(self, action: "updateBackButton", forControlEvents: .EditingChanged)
}
func updateBackButton() {
let backButton = UIBarButtonItem(
title: formHasChanged ? "Cancel" : "Back",
style: .Done,
target: nil,
action: nil
)
print(backButton.title)
navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}
Это делает силу через кнопку назад только один раз, в методе viewDidLoad
. При последующих вызовах updateBackButton()
видимых изменений нет, хотя print(backButton.title)
распечатывает соответствующий вывод.
Что не хватает в моем подходе, чтобы иметь динамически обновляемое название кнопки «Назад»?
Вывод отчета о печати updateBackButton()
.
Optional("Back")
Optional("Cancel")
Optional("Back")
Optional("Cancel")
Optional("Back")
Я не вижу разницы. Этот метод вызывался и продолжает это делать. Но название кнопки навигации еще не изменилось. Я что-то упускаю? –
проверить значение 'formHasChanged'. Лучше распечатайте его внутри функции. – iRiziya
Как я уже упоминал в своем вопросе, этот вывод правильный. Я обновил вопрос, чтобы содержать вывод. Метод вызывается, 'formHasChanged' содержит правильное значение. Просто панель навигации не обновляется. –