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

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


4

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

self.navigationItem.title=@"title";

4

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

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

navController.navigationBar.topItem.title = @"Test";

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

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


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

2

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


1

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

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

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


1

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

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


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"
  }
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.