backBarButtonItem
является элементом, используемым для кнопки возврата next контроллер в стеке навигации.
Так, например, если у вас есть контроллер навигации с корневым viewController A
, и вы нажимаете viewController B
, то нажатие кнопки назад, которое вы видите после нажатия B
, настраивается с использованием A
.
Вы могли бы что-то вроде этого:
A.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Go back to A", style: .Plain, target: nil, action: nil)
После B
нажат, вы увидите кнопку назад с «Назад к А».
В вашем случае сложной частью является найти A
в стеке навигации от B
. Вы можете сделать это с помощью функции поиска в viewControllers
в navigationController
как так:
// This code works from the `B` view controller
let viewControllers = self.navigationController?.viewControllers ?? []
if let indexOfCurrent = viewControllers.indexOf(self) where (indexOfCurrent > viewControllers.startIndex) {
let indexOfPrevious = indexOfCurrent.advancedBy(-1)
let previousViewController = viewControllers[indexOfPrevious]
previousViewController.navigationItem.backBarButtonItem?.title = "New Title"
}
Редактировать
Я не знаю ни одного чистого способа обновить панель навигации после этого. Возможно, вы могли бы задать отдельный вопрос только для этого.
Что вы можете сделать, это поп и нажать на контроллер представления без анимации
if let navigationController = self.navigationController {
navigationController.popViewControllerAnimated(false)
navigationController.pushViewController(self, animated: false)
}
Или, может попытаться создать новый UIBarButtonItem
вместо изменения названия существующего.
Но, как зачеркнуто в моем queestion, название кнопки может измениться после нажатия кнопки B. Он должен работать как WhatsApp, где кнопка назад в контроллере просмотра чата обновляется с количеством новых сообщений чата. Мне любопытно, как им это удалось? – MJQZ1347
Я нажал публикацию по ошибке ... См. Мое редактирование – deadbeef
Спасибо, попробовал это. Кажется, что это работает, но только после того, как 'B' был открыт и снова открывается. Есть ли способ обновить 'navigationBar'? – MJQZ1347