-->

UINavigationController how to set title

2020-08-09 09:03发布

问题:

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 :(

回答1:

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"];


回答2:

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 UINavigationControllerembedding the view controller.

Documentation: UIViewController Class Reference: title Property



回答3:

use

self.title = @"yourTitle";


回答4:

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.



回答5:

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!!