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


77

У мене є програма на панелі вкладок з різним видом на кожній вкладці. Кожне представлення має UINavigationBar із набором заголовків у Interface Builder. Я хочу змінити заголовок на основі речення у методі ViewDidLoad, тому якщо x {змінити заголовок}.

я намагався self.title = @"title" , але це змінює заголовок самого елемента панелі вкладок.

Отже, як це робиться?

Відповіді:


207

Я встановив заголовок програмно, використовуючи код приблизно так:

navBar.topItem.title = @"title";

де navBar оголошено як IBOutlet UINavigationBar, пов'язану з панеллю навігації у конструкторі інтерфейсів. Це працювало в моєму додатку; однак я не використовував панель вкладок.

Якщо navBar.topItem є елементом панелі вкладок, я не бачу для вас способу змінити заголовок, який відображається на панелі навігації, а також не змінити заголовок на елементі панелі вкладок, оскільки елемент navBar topItem і елемент панелі вкладок є той самий об'єкт.


2
Працював досконало, знав, що я забув щось зробити; і це було пов’язати IBOutlet UINavigationBar із самою панеллю. Заголовок та текст вкладки не залежать один від одного, до речі.
AveragePro

Це має проблему, коли у вас є кнопка "Назад", вона змінює заголовок кнопки "Назад" замість панелі навігації, перевірте відповідь від @CrisP.
clopez

Питання ставилося щодо подання, яке має UINavigationBar, яке відрізняється від UINavigationController, який має контролери подання, натиснуті на нього. Відповідь ChrisP, безумовно, є правильною у контексті UINavigationController, але не для випадку, обговореного у питанні.
Грег

1
self.navigationItem.title = @ "заголовок"; я вважаю, це найпростіший і найпростіший спосіб
Уміт Кая

73

Використовуйте

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

оскільки настройка navBar.topItem.titleне спрацює за будь-яких обставин.


4
NB може використовуватися лише з UINavigationBar, пов'язаним з контролером перегляду. З документації ": Це унікальний екземпляр UINavigationItem, створений для представлення контролера подання, коли він перенесений на панель навігації. Під час першого доступу до цієї властивості створюється UINavigationItem. Тому ви не повинні отримувати доступ до цієї властивості, якщо ви не використовуєте навігаційний контролер "
wuf810

25

Використовуй це :

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

або

self.tableView.tableHeaderView = navBar; etc

11

Якщо клас є типом UIViewController, тоді ви можете встановити заголовок, як вказано в методі viewDidLoad.

    [self setTitle:@"My Title"];

Це просто те, що спричинило його проблему: це також змінює заголовок елемента панелі вкладок, що НЕ було оцінено.
Lepidopteron

7

У ViewDidLoad вашого ViewController.m просто напишіть,

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

Ось результат:

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


6

створити IBOutletзUINavigationBar

navigationBar.topItem.title = @"Title";

Сподіваюся, це допомагає.


3

Я використовував наступне:

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

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


7
Ви згадуєте, що також називаєте це в блоці відправлення - це повинно бути включено у ваш прикладний код.
Luke Mcneice

2

Зверніть увагу, що для того, щоб заголовок відображався ВСІХ делегатів Навігаційного контролера ПОВИНЕН бути встановлений на саму панель навігації, або заголовок НІКОЛИ не відображатиметься!


1

Ви також можете просто встановити заголовок у ViewDidLoad під ViewController або TableViewController, використовуючи

_title = @"Title";

або

self.title = @"Title";


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.