Как программно установить заголовок панели навигации?

85

У меня есть панель навигации в представлении, и я хочу программно изменить ее заголовок элемента навигации.

Как это сделать?

Дуг Налл
источник

Ответы:

206

В вашем UIViewController

self.navigationItem.title = @"The title";
arclight
источник
Да, я бы выбрал это, так как он обновляет только заголовок navigationItem, а не заголовок toolbarItem.
Prakash Raman
30

Версия Swift 3:

Если вы используете панель навигации без контроллера навигации, вы можете попробовать следующее:

navigationBar.topItem?.title = "Your Title"

Надеюсь на помощь.

Джером
источник
11

В viewDidLoad

  self.title = @"Title";
Мадху
источник
3
Мои два цента :) Это работает, хотя, если vewcontroller является частью toolbarcontroller. Затем обновляется и заголовок элемента панели инструментов.
Prakash Raman
7

Из документации Apple :

Наиболее распространенный способ использования панели навигации - с помощью контроллера навигации. Вы также можете использовать панель навигации как отдельный объект в своем приложении.

Итак, если у вас есть UINavigationController, все, что вам нужно сделать, чтобы установить заголовок панели навигации (как описано во всех предыдущих ответах)

self.navigationItem.title = @"title";

Но если у вас есть автономная панель навигации, которая создается программно в объекте UIViewController, вы должны установить начальный внешний вид панели навигации, создав соответствующие объекты UINavigationItem и добавив их в стек объектов панели навигации, т.е.

  1. Создайте экземпляр панели навигации (UINavigationBar)
  2. Создайте экземпляр элемента панели навигации (UINavigationItem), который управляет кнопками и представлениями, которые будут отображаться в объекте UINavigationBar. Обратите внимание, что вы устанавливаете заголовок на этом этапе.
  3. (Необязательный шаг) Добавьте кнопки вправо / влево (экземпляры UIBarButtonItem) к элементу панели навигации.

Пример кода Objective-C для указанных шагов:

UINavigationBar* navbar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];

/* Create navigation item object & set the title of navigation bar. */
UINavigationItem* navItem = [[UINavigationItem alloc] initWithTitle:self.shoppingItem.name];

/* Create left button item. */
UIBarButtonItem* cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(onTapCancel:)];
navItem.leftBarButtonItem = cancelBtn;

/* Create left button item. */
UIBarButtonItem* doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(onTapDone:)];
navItem.rightBarButtonItem = doneBtn;

/* Assign the navigation item to the navigation bar.*/
[navbar setItems:@[navItem]];

/* add navigation bar to the root view.*/
[self.view addSubview:navbar];

Для Swift-версии автономной панели навигации ознакомьтесь с этим ответом .

Ваэль Шоуэр
источник
6

Напишите приведенный ниже код viewDidLoadили, возможно, лучше будет подinitWithNibName:

  self.navigationItem.title = @"title";

Благодарю.

Нихил Бансал
источник
6

Вы также можете использовать 👇🏻

[self.navigationController.navigationBar.topItem setTitle:@"Titlet"];
Сурджит Раджпут
источник
2

Этот код у меня не работал

self.navigationItem.title = @"Title here";

Но это сработало.

self.title = "Title Name"
Прасад А
источник
2

В viewDidLoad вашего UIViewController

self.navigationItem.title = "The title";  //In swift 4

или же

ты можешь просто

self.title = "The title"

сделает трюк

вы также можете поместить приведенный выше оператор в делегат приложения для глобальной репликации.

NickCoder
источник
0

Используйте его в методе ViewDidLoad

Формат:

@property(nonatomic,readonly,retain) UINavigationItem *navigationItem; // Created on-demand so that a view controller may customize its navigation appearance.

Пример :

self.navigationItem.title = @"Title here";
Джайпракаш Дубей
источник
0

очень важное примечание: убедитесь, что вы внесли изменения, упомянутые выше, в методе viewDidLoad контроллера родительского представления или в родительской панели навигации в раскадровке

Smoothumut
источник
0

Иногда вы можете столкнуться с ситуацией, когда вы обновляете заголовок, и это не вызывает никакого эффекта, это может быть, когда у вас есть настраиваемый вид, topItemпоэтому вы можете обновить его следующим образом:(self.navigationController?.navigationBar.topItem?.titleView as? UILabel)?.text = "My Happy New Title"

Хола Сой Эду Фелиз Навидад
источник