I have a Controller/View for a generic list of items, that can be extended for displaying a custom list.. Listing and navigation works fine.. but I can't change the title of UINavigationController.
In the generic Controller:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view addSubview: navigationController.view];
}
- (void)setNavigationTitle: (NSString *)title
{
NSLog(@"set title: %@", title); // this works
self.navigationController.title = title; // Nothing works here
}
Then, the extended class does..
- (void)viewDidLoad
{
[super viewDidLoad];
[self setNavigationTitle: @"Custom list"];
}
The navigationBar still have "Item" as title :(
In your UIViewController
there is a title
property and it is that property that will be displayed by the NavigationController
. So when pushing a new UIViewController
onto the navigation stack set the title of that UIViewController
to whatever is appropriate.
In your case it looks like it would be:
[self setTitle:@"WhateverTitle"];
For those looking for a Swift solution:
class CustomViewController: SuperViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "My Custom Title"
}
}
The title
needs to be set on the UIViewController
and not on the UINavigationController
embedding the view controller.
Documentation: UIViewController
Class Reference: title
Property
use
self.title = @"yourTitle";
Swift
title = "whateverTitle"
. It's a UIViewController
instance property ; invoke anytime.
From the documentation:
Declaration
var title: String? { get set }
Discussion
Set the title to a human-readable string that describes the view. If the view controller has a valid navigation item or tab-bar item, assigning a value to this property updates the title text of those objects.
I know its old thread but thought of sharing this
Set the 'self.title' in 'init' method in UIVIewControler derived class,
This worked for me!!