iPhone: установка заголовка панели навигации

87

Всем привет. Я все еще новичок в разработке iPhone, и мне сложно понять, как изменить заголовок панели навигации. По другому вопросу на этом сайте кто-то рекомендовал использовать:

viewController.title = @"title text";

но это не работает для меня ... Мне нужно добавить UINavigationController для этого? Или, может быть, просто выход из моего подкласса UIViewController? Если это поможет, я определил панель навигации в IB и пытаюсь установить ее заголовок в своем подклассе UIViewController. Это еще одна из тех простых вещей, от которых у меня болит голова. Ввод self.title = @ "текст заголовка"; вviewDidLoad и initWithNibNameтоже не сработало. Кто-нибудь знает, что происходит и как это сделать правильно?

Благодарность!

Артур Скирвин
источник

Ответы:

154

Контроллер представления должен быть дочерним по отношению к некоторому UINavigationController, чтобы .titleсвойство вступило в силу. Если UINavigationBar - это просто представление, вам нужно нажать элемент навигации, содержащий заголовок, или изменить последний элемент навигации:

UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

или

bar.topItem.title = @"title text";
Kennytm
источник
8
Вау. Я серьезно провел последний час, просматривая форумы и документацию, пытаясь понять это, и я убедил себя, что это будет сложнее, чем это. Этот код настолько прост, что мне не пришлось ничего переделывать в IB. Отлично! Кенни, ты молодец. Если я помню, вы также ответили на мой вопрос NSDate и заставили меня исследовать словари. Ты мой новый любимый человек на этом сайте. БОЛЬШОЕ спасибо за вашу помощь!
Артур Скирвин
5
Ваш комментарий заставил меня улыбнуться и задуматься: заводил ли кто-нибудь когда-нибудь здесь, в SO, друзей? обычно все здесь очень полезны, но, кажется, не выражают никаких человеческих эмоций (кроме спрашивающего, конечно, когда он / она расстроены)
maltalef
См. Ответ Сорина для решения, совместимого с раскадровкой.
devios1
Спасибо за ответ, который действительно сэкономил мне много времени. :) @kennytm
jerry_sjtu
124

если вы делаете все это с помощью кода в viewDidLoadметоде, UIViewControllerвам нужно только добавитьself.title = @"title text";

что-то вроде этого:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"title";
}

вы также можете попробовать self.navigationItem.title = @"title";

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

Сорин Антохи
источник
@ SorinA, спасибо. Это лучший способ дать название панели навигации.
Tirth
33

Есть одна проблема с использованием self.title = @"title";

Если вы используете панель навигации вместе с панелью вкладок, указанная выше строка также меняет метку для элемента панели вкладок. Чтобы этого избежать, используйте то, что предлагает @testing

self.navigationItem.title = @"MyTitle";
Джигиш
источник
13

Если вы хотите изменить заголовок навигационной панели (а не заголовок кнопки возврата на навигационной панели!), Этот код будет работать.

self.navigationController.topViewController.title = @"info";
М. Гёкай Борулдай
источник
9

Если вы хотите изменить заголовок navBar внутри контроллера tabBar, сделайте следующее:

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}
Пантелис Пройос
источник
viewDidAppear помог мне после 2 часов попыток решить эту проблему. Спасибо :)
Tchelow
topItem.title может быть или не быть заголовком панели навигации. Если это экран верхнего уровня без кнопки возврата, он установит заголовок. Но если у вас есть кнопка возврата, topItem.title на самом деле является заголовком кнопки возврата.
user2962499
5

В моем приложении на основе навигации я делаю следующее:

myViewController.navigationItem.title = @"MyTitle";
тестирование
источник
4

У меня были контроллеры навигации, интегрированные в TabbarController. Это сработало

self.navigationItem.title=@"title";
Сагар Дэлвэйл
источник
4

По умолчанию контроллер навигации отображает заголовок 'topitem'

так что в вашем методе viewdidload вашего appdelegate вы можете. Я проверил и работает

navController.navigationBar.topItem.title = @"Test";
ronaldus_magnus
источник
2
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

Этот код работал.

rmsh
источник
Добро пожаловать в SO и спасибо за сообщение. Лучше опубликовать эту информацию в качестве комментария, пожалуйста, посмотрите Как ответить для получения дополнительной информации.
Serge Belov
2

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

Парень
источник
1

Думаю, вам нужен динамический заголовок, поэтому вы не устанавливаете его в IB.

И я предполагаю, что ваш объект viewController - это тот, который указан в NIB?

Возможно, попытка установить для него фиктивное значение в IB, а затем отладить методы, чтобы увидеть, какой контроллер имеет фиктивное значение - при условии, что оно отображается как заголовок ...

Крис Кимптон
источник
1

Изнутри вашего TableViewController.m:

self.navigationController.navigationBar.topItem.title = @ "Бла-бла Какой-то потрясающий заголовок";

OneInABajilian
источник
1

Для всех ваших Swift-ов у меня это отлично сработало. Это, в частности, один из самых коротких способов установить заголовок:

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if segue.identifier == "presentLineItem" {
    print("Setting Title")
    var vc = segue.destinationViewController as! LineItemsTableViewController
    vc.navigationItem.title = "Line Item"
  }
}
kbpontius
источник