UINavigationBar - Установить заголовок программно?

У меня есть приложение панели вкладок с различным представлением на каждой вкладке. Каждое представление имеет UINavigationBar с заголовком, установленным в Интерфейсном Разработчике. Я хочу изменить заголовок на основе предложения в методе ViewDidLoad, поэтому, если x {измените заголовок}.

Я пробовал self.title = @"title", но это меняет заголовок самого элемента панели вкладок.

Итак, как это сделать?


person AveragePro    schedule 09.09.2010    source источник


Ответы (11)


Я установил заголовок программно, используя примерно такой код:

navBar.topItem.title = @"title";

где navBar объявлен как IBOutlet UINavigationBar, связанный с панелью навигации в построителе интерфейса. Это сработало в моем приложении; однако я не использовал панель вкладок.

Если navBar.topItem является элементом панели вкладок, я не вижу способа изменить заголовок, отображаемый на панели навигации, без изменения заголовка элемента панели вкладок, поскольку topItem navBar и элемент панели вкладок тот же объект.

person Greg    schedule 09.09.2010
comment
Работал отлично, знал, что что-то забыл; и это была связь IBOutlet UINavigationBar с самой панелью. Между прочим, заголовок и текст табуляции не зависят друг от друга. - person AveragePro; 10.09.2010
comment
Это проблема, когда у вас есть кнопка "Назад", она меняет название кнопки "Назад" вместо панели навигации, проверьте ответ от @CrisP. - person clopez; 23.08.2012
comment
Вопрос касался представления, имеющего UINavigationBar, которое отличается от UINavigationController, на которое наложены контроллеры представления. Ответ ChrisP, безусловно, правильный ответ в контексте UINavigationController, но не для случая, обсуждаемого в вопросе. - person Greg; 18.07.2013
comment
self.navigationItem.title = @title; я считаю, что это самый простой-легкий способ - person Umit Kaya; 10.07.2015

Использовать

self.navigationItem.title = @"the title";

поскольку установка navBar.topItem.title не будет работать ни при каких обстоятельствах.

person ChrisP    schedule 12.09.2011
comment
NB можно использовать только с UINavigationBar, связанным с контроллером представления. Из документации: это уникальный экземпляр UINavigationItem, созданный для представления контроллера представления, когда он помещается на панель навигации. При первом доступе к этому свойству создается UINavigationItem. Следовательно, вам не следует обращаться к этому свойству, если вы не используете контроллер навигации. - person wuf810; 03.02.2012

Использовать это :

    CGRect navBarFrame = CGRectMake(0, 0, self.tableView.frame.size.width, 44.0);
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:navBarFrame];

    UINavigationItem *navItem = [UINavigationItem alloc];
    navItem.title = @"Your Title";

    [navBar pushNavigationItem:navItem animated:false];

[self.view addSubView:navBar]; 

or

self.tableView.tableHeaderView = navBar; etc
person Muzammil    schedule 14.02.2013

Если класс является типом UIViewController, вы можете установить заголовок, как указано в методе viewDidLoad.

    [self setTitle:@"My Title"];
person Augustine P A    schedule 18.10.2012
comment
Это как раз то, что было причиной его проблемы: он также меняет заголовок элемента панели вкладок, что НЕ было оценено. - person Lepidopteron; 23.03.2017

В ViewDidLoad вашего ViewController.m просто напишите,

self.navigationItem.title=@"Hello World";

Вот результат:

введите описание изображения здесь

person iAnkit    schedule 08.11.2014

Создать IBOutlet из UINavigationBar

navigationBar.topItem.title = @"Title";

Надеюсь это поможет.

person Shyam    schedule 22.03.2012

Я использовал следующее:

self.navigationController.navigationBar.topItem.title = @"Title";

Однако мне также пришлось вызвать его в блоке отправки, поскольку он не изменил бы заголовок при вызове в viewDidLoad без него.

person Tod Cunningham    schedule 16.02.2012
comment
Вы упоминаете, что вы также вызываете его в блоке отправки - это должно быть включено в ваш примерный код. - person Luke Mcneice; 26.04.2013

Обратите внимание, что для того, чтобы заголовок отображался ВООБЩЕ, делегат контроллера навигации ДОЛЖЕН быть установлен на саму панель навигации, иначе заголовок НИКОГДА не будет отображаться!

person Mike    schedule 18.04.2013

Вы также можете просто установить заголовок в ViewDidLoad под вашим ViewController или TableViewController, используя

_title = @"Title";

or

self.title = @"Title";
person donmiller    schedule 28.09.2014

Я добился этого в Swift 5

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "Title"
}
person IMRAN RASHEED    schedule 21.08.2019

Попробуй это,

self.navigationItem.title = @"Your title";
person Kiran eldho    schedule 11.01.2017