Ты прав. Макет раскадровки является непоследовательным и запутанным в случае ViewControllers в стеке NavigationController. Первый предлагает прямой доступ к NavigationItem, но позже нет. Я полагаю, это потому, что существует только один NavigationItem, и его нужно динамически обновлять, когда ViewControllers выдвигаются и выталкиваются.
Способ справиться с этим - сделать это в коде. При нажатии ViewController его свойство title
используется для установки заголовка на панели навигации. Итак, в каждом из ваших ViewController, которые находятся в стеке NavigationController, установите его title
в viewDidLoad
:
self.title = "titleForThisVC"
Для rightBarButton
вы также добавляете его программно. Если это ваш @IBAction
для кнопки:
@objc func handleRightBarButton() {
print("right button")
}
тогда вы добавите кнопку следующим образом (снова в viewDidLoad
):
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Foo", style: .plain,
target: self, action: #selector(handleRightBarButton))
Последний получил за UITabBarController
с
Если ваши NavigationControllers являются потомками UITabBarController
, тогда заголовок, который используется на панели вкладок, получит заголовок из первого ViewController в стеке, как установлено кодом, но только после того, как эта вкладка будет первой был получен доступ. Чтобы обойти это, свойство title
также должно быть установлено для верхних ViewControllers в Инспекторе атрибутов в Интерфейсном Разработчике