2015-11-14 7 views
15

Я пытаюсь установить заголовок Navigation Bar в Swift, я установил Tab Bar и в Navigation Bar ничего не отображается, нет кнопки, нет названия, ничего. Я использовал некоторый код, но он не работает, пока я использую Tab Bar, и когда я удалил Tab Bar, код работает, и все в порядке с Navigation Bar, отображается название и отображаются кнопки.Как установить заголовок панели навигации в Swift?

код, который я использовал для заголовка является:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.navigationItem.title = "My Title" 

} 

И в Main.storyboard я соединил Navigation Controller с Tab Bar Controller, как показано на рисунке.

enter image description here

Итак, как это исправить? Проблема в том, что Navigation Bar не работает при использовании Tab Bar.

+1

У вас есть контроллер навигации и контроллер панели вкладок неправильно. Панель вкладок должна быть корнем. Затем на каждой вкладке должен быть контроллер навигации. Это даст вам стандартные элементы управления, которые поставляются с панелью вкладок, и настройка заголовка будет проще. – Fogmeister

+1

При объединении контроллеров панели и навигационных контроллеров корневой контроллер должен быть контроллером панели вкладок, и каждая вкладка должна иметь свой собственный контроллер навигации. См. Http: // stackoverflow.com/a/26153273/1630618 – vacawama

ответ

20

Поскольку Tab Bar на самом деле Root View Controller из Navigation Bar, вы необходимо установить UITabBarController «s 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 
} 

Но лучший способ сделать это будет фактически иметь это наоборот, как и

Correct view hierarchy

Вы должны подключить UINavigationController для каждого ребенка в UITabBarController, так как это более правильно семантически , и проще поддерживать.

+0

А как насчет кнопок? – Emm

+1

Создайте 'IBOutlet' для каждой кнопки и используйте код, который я только собираюсь обновить свой ответ – kabiroberai

+1

@EminEmini. Я только что обновил свой ответ. – kabiroberai

9

Ваш вопрос неясен, если код, который вы представили от UIViewController, что хранится внутри UINavigationController и navigationBar показано, вы можете просто использовать:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.title = "My Title" 
} 
1

В UINavigationController Класс Ссылка Apple, писал:

инициализации (RootViewController: UIViewController)
Параметры RootViewController
Контроллер вид, который находится в нижней части навигации стека. Этот объект не может быть экземпляром класса UITabBarController.

Но вы можете сделать это, если вы настаивали. Но в этом случае ваши ViewControllers tabbarController имеют общий заголовок, который является названием tabbarController.

Лучший способ сделать это - дать каждому из элементов управления tabbarController контроль NavigationViewController.

Смежные вопросы