Как установить заголовок панели навигации в Swift?
Я пытаюсь установить заголовок Navigation Bar
в Swift, я установил Tab Bar
, а в Navigation Bar
ничего не отображается, нет кнопки, нет заголовка, ничего. Я использовал некоторый код, но он не работает, пока я использую Tab Bar
, и когда я удалял Tab Bar
, код работает, и все в порядке с Navigation Bar
, отображается название и отображаются кнопки.
Код, который я использовал для заголовка:
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "My Title"
}
И в Main.storyboard
я подключил Navigation Controller
к Tab Bar Controller
, как показано на рисунке.
![введите описание изображения здесь]()
Итак, как это исправить? Проблема в том, что Navigation Bar
не работает при использовании Tab Bar
.
Ответы
Ответ 1
Так как Tab Bar
на самом деле является Root View Controller
Navigation Bar
, вам нужно установить UITabBarController
title
вместо этого в функции viewWillAppear
, чтобы это происходило при каждом переключении вкладок:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.navigationItem.title = "My Title"
self.tabBarController?.navigationItem.leftBarButtonItem = settingsButton //This is the IBOutlet variable that you previously added
}
Но лучший способ сделать это на самом деле состоит в том, чтобы иметь это наоборот, например
![Коррекция правильного представления]()
Вы должны подключить UINavigationController
для каждого дочернего элемента UITabBarController
, так как это более корректно семантически и проще поддерживать.
Ответ 2
Ваш вопрос неясно, если показан представленный код от UIViewController
, который хранится внутри UINavigationController
и navigationBar
, вы можете просто использовать:
override func viewDidLoad() {
super.viewDidLoad()
self.title = "My Title"
}
Ответ 3
В справочнике классов UINavigationController Apple написала следующее:
init (rootViewController: UIViewController)
параметры RootViewController
Контроллер представления, который находится в нижней части навигационного стека. Этот объект не может быть экземпляром класса UITabBarController.
Но вы можете сделать это, если будете настаивать. Но в этом случае ваши ViewControllers tabbarController имеют общий заголовок, который является названием tabbarController.
Лучший способ сделать это - дать каждому из viewbarController viewControllers функцию NavigationViewController.