iPhone: встановлення заголовка панелі навігації


86

Привіт усім. Я все ще досить новачок у розробці 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. Ідеально! Кенні TM, ти рок. Якщо я пам’ятаю, ви також відповіли на моє запитання щодо NSDate і налаштували мене на вивчення словників. Ви моя нова улюблена людина на цьому сайті. ДЯКУЄМО БАГАТО за всю вашу допомогу!
Артур Скірвін,

5
Ваш коментар змусив мене посміхнутися і здивуватися: чи хто-небудь коли-небудь заводив тут друзів, колись? зазвичай всі тут дуже корисні, але, здається, не виражають жодних людських емоцій (крім того, хто
питає,

Див. Відповідь Соріна щодо рішення, сумісного з розкадровкою.
devios1

Дякую за вашу відповідь, яка справді заощаджує мені багато часу. :) @kennytm
jerry_sjtu

123

якщо ви робите все це за допомогою коду в viewDidLoadметоді, UIViewControllerвам слід лише додатиself.title = @"title text";

щось на зразок цього:

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

Ви також можете спробувати self.navigationItem.title = @"title";

також перевірте, чи не є для вашого навігаційного елемента значення null, і якщо ви встановили власний фон на панелі навігації, перевірте, чи встановлено заголовок без нього.


@ 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 вашого додатка можна делегувати. Я перевірив це, і воно працює

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

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

Цей код спрацював.


Ласкаво просимо до SO та дякуємо за допис. Краще подивіться розмістити цю інформацію як коментар. Будь ласка, ознайомтесь із розділом « Як відповісти» для отримання додаткової інформації.
Серж Бєлов

2

Якщо ви працюєте з Storyboards, ви можете натиснути на контролер, перейти на вкладку властивостей і встановити там текст заголовка.


1

Я думаю, вам потрібен динамічний заголовок, тому ви не встановлюєте його в IB.

І я припускаю, що ваш об’єкт viewController - це той, який вказаний у NIB?

Можливо, намагається встановити для нього фіктивне значення в IB, а потім налагодити методи, щоб побачити, який контролер має фіктивне значення - припускаючи, що це відображається як заголовок ...


1

У вашому TableViewController.m:

self.navigationController.navigationBar.topItem.title = @ "Бла-бла, якась дивовижна назва";


1

Для всіх твоїх Стрімків там мені це вдалося. Це, зокрема, один із коротших способів встановити заголовок:

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.