Подтвердить что ты не робот

Изменить имя вкладки в uitabbarcontroller

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

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

4b9b3361

Ответ 1

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

С моего первоначального ответа произошло много: 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.

Способ Nib

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

Using interface builder, in the Attributes Inspector

К сожалению, если 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"];

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

Ответ 2

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

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

enter image description here

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

enter image description here

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

Ответ 3

В 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;
}

Ответ 4

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

 self.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Main Tab" image:[UIImage imageNamed:@"maintab.png"]] autorelease];

Ответ 5

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

[[self.viewControllers objectAtIndex:0] setTitle: @"Buga"];
[[self.viewControllers objectAtIndex:1] setTitle: @"Nuga"];

Ответ 6

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

введите описание изображения здесь