How to set title of Navigation Bar in Swift?

Emm picture Emm · Nov 14, 2015 · Viewed 26k times · Source

I'm trying to set title of Navigation Bar in Swift, I set Tab Bar and in Navigation Bar nothing is showing, no button, no title, nothing. I used some code but it's not working while I use Tab Bar, and when I deleted Tab Bar, code is working and everything is ok with Navigation Bar, title is showing and buttons are showing.

Code that I used for title is:

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationItem.title = "My Title"

}

And in Main.storyboard I connected Navigation Controller with Tab Bar Controller, as in picture.

enter image description here

So, how to fix this ? The problem is that Navigation Bar is not working while using Tab Bar.

Answer

kabiroberai picture kabiroberai · Nov 14, 2015

Since the Tab Bar is actually the Root View Controller of the Navigation Bar, you need to set the UITabBarController's title instead in the viewWillAppear function so that it happens every time you switch tabs:

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
}

But a better way to do it would actually be to have it the other way around, like so

Correct view hierarchy

You should hook up a UINavigationController for each child of the UITabBarController, as it is more correct semantically, and simpler to maintain.