Как установить заголовок панели навигации в 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.