Ответ 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)
К сожалению, если 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"];
Возможно, вы также можете сделать это с помощью элемента навигации, но для этого потребуется больше гимнастики, чем мне комфортно.