Как установить заголовок панели навигации программно? - PullRequest
73 голосов
/ 27 мая 2011

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

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

Ответы [ 11 ]

179 голосов
/ 27 мая 2011

В вашем UIViewController

self.navigationItem.title = @"The title";
20 голосов
/ 20 октября 2016

Swift 3 Версия:

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

navigationBar.topItem?.title = "Your Title"

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

10 голосов
/ 16 ноября 2013

InDidLoad

  self.title = @"Title";
7 голосов
/ 01 декабря 2015

С Документация 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 голосов
/ 22 марта 2012

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

  self.navigationItem.title = @"title";

Спасибо.

5 голосов
/ 30 марта 2016

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

[self.navigationController.navigationBar.topItem setTitle:@"Titlet"];
1 голос
/ 21 марта 2019

В viewDidLoad вашего UIViewController

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

выполнит трюк

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

1 голос
/ 30 апреля 2018

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

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

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

self.title = "Title Name"
0 голосов
/ 31 августа 2016

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

0 голосов
/ 04 декабря 2015

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

...