Изменить имя вкладки в uitabbarcontroller - PullRequest
33 голосов
/ 31 августа 2011

У меня есть TabBarController, установленный в качестве основной вкладки контроллера, где имена были определены с помощью построителя интерфейса.Теперь я хотел бы изменить его названия программно.

Как это можно сделать?

Ответы [ 7 ]

44 голосов
/ 31 августа 2011

Обновлено до XCode 8

Со времени моего первоначального ответа многое произошло: Swift 3, Раскадровки и т. Д. Заголовок, как правило, является общим для всех видов и может быть установлен в инспекторе атрибутов

Title Setup

Кроме того, для большего контроля вы всегда можете перетащить элементы UITabBarItem и UINavigationItem из конструктора.Вы должны перетащить их в представление, которое будет отображаться на панели вкладок / в контроллере навигации.В основном они хранят информацию как «Я хочу, чтобы она отображалась на панели вкладок вот так».

enter image description here

Hello Scene добавляет TabBarItem кэто, так что это может быть настроено.

Эти два элемента ведут себя точно так же, как доступ к свойствам контроллера вида 1023 * и .navigationItem через код.Эти свойства всегда существуют в коде, если они являются дочерними по отношению к соответствующему объекту (nav имеет navItem, а tab имеет tabItem), вам не нужно добавлять их в раскадровку / xib, чтобы иметь их.

Это последнееЭто немного сбивает с толку, поскольку в раскадровке / XIB, кажется, вы добавляете их в контроллер представления, но на самом деле вы просто говорите: «Перо тоже настроит эти свойства».

Оригинальный ответ

Имя, которое появляется на панели вкладок, происходит от свойства UIViewController title,

self.title = @"Name me!";

Вы можете изменить заголовок в любой момент, и он должен обновить текст, появляющийсяна панели вкладок.Но будьте осторожны, сделайте это как можно скорее , в идеале, в используемом методе init (или initWithNibName:bundle:, или initWithCoder:).

Ключ здесь, эточто методы init вызываются, как только на экране появляется панель вкладок, поскольку она инициализирует весь свой контроллер представления.Если бы вы делали это на viewDidLoad, это было бы вызвано только в том случае, если вы действительно выбрали вкладку, тогда другие семейства вызовов, такие же, относятся к awakeFromNib, viewWillAppear:, viewDidAppear: и т. Д.

Идея иметь название на UIViewController состоит в том, чтобы все было согласованно.Если вы показываете этот viewController на UINavigationController, панель навигации вверху должна использовать свойство title, как это происходит при использовании back.UITabBarController также учитывает то же свойство заголовка и изменяется соответствующим образом.

С точки зрения повторного использования заголовок следует устанавливать только изнутри подкласса UIViewController.

Способперо

Использование перьев или раскадровки?Если у вас есть UIViewController, вы можете дать ему имя прямо в инспекторе атрибутов (или 4 )

Using interface builder, in the Attributes Inspector

К сожалению, если Владелец файла является подклассом UIViewController, то вы не сможете получить к нему доступ таким образом, просто потому, что XCode регистрирует Владельца файла как «Внешний объект»,и не показывает панель конфигурации для него.: (

Несколько заголовков, один и тот же контроллер представления

Но иногда вы просто хотите, чтобы они назывались по-разному

// Modify the display title on the tab bar
self.tabBarItem.title = @"World";

// Modify the display title on the navigation bar
self.navigationItem.title = @"Hello World";

Прикручивание с соседями

Каждый UIViewController должен обрабатывать свое собственное имя, что если вы захотите вызвать его извне (и, таким образом, полностью нарушив оригинальную вещь, которую я сказал о возможности повторного использования)?

// Rename the other guy's .title property
[[self.tabBarController.viewControllers objectAtIndex:<#Index#>] setTitle:@"Hello World"];

// Or do as before, and rename the other guy's tab bar 
[(UITabBarItem*)[self.tabBarController.tabBar.items objectAtIndex:<#index#>] setTitle:@"Hello World"];

Вы также можете сделать это с помощьюпункт навигации, но для этого потребуется больше гимнастики, чем мне удобно.

31 голосов
/ 15 июня 2015

Однако это можно сделать в коде, лучше установить это непосредственно в Раскадровка . Как?

Просто нажмите на соответствующий элемент панели вкладок внутри контроллера ( НЕ ВНУТРИ КОНТРОЛЛЕРА TABBAR ).

enter image description here

Затем переключитесь на attribute inspector на панели Утилиты .

enter image description here

Теперь вы можете изменить все: -)

4 голосов
/ 26 марта 2018

Swift 4 +

tabBarController?.tabBar.items![1].title = "xx"
2 голосов
/ 19 октября 2012

В вашем viewController.m

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
  //Here you are setting title

self.title = NSLocalizedString(@"Title", @"Title");

}
return self;
}
1 голос
/ 01 октября 2012

Возможно, вы захотите сделать это в UITabBarController :: viewDidLoad, и в этом случае вам нужно будет установить заголовок контроллера представления, потому что элементы панели вкладок в данный момент равны 0. Так что используйте

[[self.viewControllers objectAtIndex:0] setTitle: @"Buga"];
[[self.viewControllers objectAtIndex:1] setTitle: @"Nuga"];
1 голос
/ 31 августа 2011

Вот как вы можете изменить имя и изображение значка панели вкладок:

 self.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Main Tab" image:[UIImage imageNamed:@"maintab.png"]] autorelease];
0 голосов
/ 05 мая 2017

Я использую Xcode Version 8.2.1 (8C1002), и это работает для меня:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...