Reputation: 1210
Hey all. I'm still pretty new to iPhone development, and I'm having a bit of trouble figuring out how to change the title of my Navigation Bar. On another question on this site somebody recommended using :
viewController.title = @"title text";
but that isn't working for me...Do I need to add a UINavigationController to accomplish this? Or maybe just an outlet from my UIViewController subclass? If it helps, I defined the navigation bar in IB and I'm trying to set its title in my UIViewController subclass. This is another one of those simple things that gives me a headache. Putting self.title = @"title text"; in viewDidLoad
and initWithNibName
didn't work either. Anybody know what's happening and how to get it happening right?
Thanks!
Upvotes: 89
Views: 148143
Reputation: 3917
For all your Swift-ers out there, this worked perfectly for me. It's notably one of the shorter ways to accomplish setting the title, as well:
override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "presentLineItem" {
print("Setting Title")
var vc = segue.destinationViewController as! LineItemsTableViewController
vc.navigationItem.title = "Line Item"
}
}
Upvotes: 1
Reputation: 71
From within your TableViewController.m :
self.navigationController.navigationBar.topItem.title = @"Blah blah Some Amazing title";
Upvotes: 1
Reputation: 350
If you want to change navbar title (not navbar back button title!) this code will be work.
self.navigationController.topViewController.title = @"info";
Upvotes: 13
Reputation: 1369
If you want to change the title of a navBar inside a tabBar controller, do this:
-(void)viewDidAppear:(BOOL)animated {
self.navigationController.navigationBar.topItem.title = @"myTitle";
}
Upvotes: 9
Reputation: 12512
If you are working with Storyboards, you can click on the controller, switch to the properties tab, and set the title text there.
Upvotes: 2
Reputation: 6135
if you are doing it all by code in the viewDidLoad
method of the UIViewController
you should only add self.title = @"title text";
something like this:
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"title";
}
you could also try self.navigationItem.title = @"title";
also check if your navigationItem is not null and if you have set a custom background to the navigationbar check if the title is set without it.
Upvotes: 126
Reputation: 1784
There's one issue with using self.title = @"title";
If you're using Navigation Bar along with Tab bar, the above line also changes the label for the Tab Bar Item. To avoid this, use what @testing suggested
self.navigationItem.title = @"MyTitle";
Upvotes: 34
Reputation: 311
By default the navigation controller displays the title of the 'topitem'
so in your viewdidload method of your appdelegate you can. I tested it and it works
navController.navigationBar.topItem.title = @"Test";
Upvotes: 4
Reputation: 41
I had a navigation controllers integrated in a TabbarController. This worked
self.navigationItem.title=@"title";
Upvotes: 4
Reputation: 21
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];
This code worked.
Upvotes: 2
Reputation: 20279
In my navigation based app I do this:
myViewController.navigationItem.title = @"MyTitle";
Upvotes: 5
Reputation: 523154
The view controller must be a child of some UINavigationController for the .title
property to take effect. If the UINavigationBar is simply a view, you need to push a navigation item containing the title, or modify the last navigation item:
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];
or
bar.topItem.title = @"title text";
Upvotes: 153
Reputation: 5541
I guess you need a dynamic title that is why you don't set it in IB.
And I presume your viewController object is the one specified in the NIB?
Perhaps trying setting it to a dummy value in IB and then debug the methods to see which controller has the dummy value - assuming it appears as the title...
Upvotes: 1