This question already has an answer here:
-
what would be a proper storyboard example of combining nav bars and tab bars in one app?
2 answers
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.
So, how to fix this ? The problem is that Navigation Bar
is not working while using Tab Bar
.
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
You should hook up a UINavigationController
for each child of the UITabBarController
, as it is more correct semantically, and simpler to maintain.
Your question is unclear, if the code you presented is from UIViewController
that is kept inside UINavigationController
and navigationBar
is shown you can simply use:
override func viewDidLoad() {
super.viewDidLoad()
self.title = "My Title"
}
In UINavigationController Class Reference Apple wrote this:
init(rootViewController: UIViewController)
Parameters
rootViewController
The view controller that resides at the bottom of the navigation stack. This object cannot be an instance of the UITabBarController class.
But you can do it if you insisted.But in this case , your ViewControllers of tabbarController all shared the same title,which is the title of tabbarController.
A better way to do it is to give each of tabbarController's viewControllers a NavigationViewController.