У меня есть TabBarController, установленный как вкладка главного контроллера, где имена были определены с помощью конструктора интерфейса. Теперь я хочу изменить свои имена программно.
Как это можно сделать?
У меня есть TabBarController, установленный как вкладка главного контроллера, где имена были определены с помощью конструктора интерфейса. Теперь я хочу изменить свои имена программно.
Как это можно сделать?
С моего первоначального ответа произошло много: Swift 3, Storyboards и т.д. Название обычно совпадает с общим представлением всех просмотров и может быть установлено в инспекторе атрибутов
Кроме того, для большего контроля вы всегда можете перетащить элементы UITabBarItem и UINavigationItem из представления конструктора. Вы должны перетащить их в представление, которое будет отображаться в панели вкладок/навигационном контроллере. В основном они хранят информацию как "Я хочу быть отображенным в панели вкладок, как это".
Hello Scene получает добавленный TabBarItem, поэтому его можно настроить.
Эти два элемента ведут себя точно так же, как доступ к свойствам контроллера просмотра .tabBarItem и .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, как при обратном. UITabBarController также учитывает одно и то же свойство title и соответственно изменяется.
В терминах повторного использования вы должны указывать заголовок только изнутри подкласса UIViewController.
Использование nibs или раскадровки? Если у вас есть UIViewController, вы можете дать ему имя прямо в инспекторе атрибутов (или ⌥ ⌘ 4)

К сожалению, если File Owner является подклассом UIViewController, то вы не сможете получить к нему доступ таким образом, просто потому, что XCode регистрирует File Owner как "внешний объект" и не показывает для нее.: (
Но иногда вы просто хотите, чтобы они назывались по-разному
// 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 .title property
[[self.tabBarController.viewControllers objectAtIndex:<#Index#>] setTitle:@"Hello World"];
// Or do as before, and rename the other guy tab bar
[(UITabBarItem*)[self.tabBarController.tabBar.items objectAtIndex:<#index#>] setTitle:@"Hello World"];
Возможно, вы также можете сделать это с помощью элемента навигации, но для этого потребуется больше гимнастики, чем мне комфортно.
Однако это можно сделать в коде, лучше установить его непосредственно в раскадровке. Как?
Просто коснитесь соответствующего элемента панели вкладок внутри контроллера (НЕ ВНУТРЕННИЙ КОНТРОЛЛЕР TABBAR).

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

Теперь вы можете изменить все: -)
В 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;
}
Таким образом вы можете изменить имя и изображение значка панели вкладок:
self.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Main Tab" image:[UIImage imageNamed:@"maintab.png"]] autorelease];
Вероятно, вы захотите сделать это в UITabBarController:: viewDidLoad, и в этом случае вам нужно установить заголовок контроллера представления, потому что в данный момент в пунктах панели вкладок находится 0. Поэтому используйте
[[self.viewControllers objectAtIndex:0] setTitle: @"Buga"];
[[self.viewControllers objectAtIndex:1] setTitle: @"Nuga"];
Я использую Xcode Version 8.2.1 (8C1002), и это работает для меня: