Обновлено до XCode 8
Со времени моего первоначального ответа многое произошло: Swift 3, Раскадровки и т. Д. Заголовок, как правило, является общим для всех видов и может быть установлен в инспекторе атрибутов
Кроме того, для большего контроля вы всегда можете перетащить элементы UITabBarItem
и UINavigationItem
из конструктора.Вы должны перетащить их в представление, которое будет отображаться на панели вкладок / в контроллере навигации.В основном они хранят информацию как «Я хочу, чтобы она отображалась на панели вкладок вот так».
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 )
К сожалению, если Владелец файла является подклассом 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"];
Вы также можете сделать это с помощьюпункт навигации, но для этого потребуется больше гимнастики, чем мне удобно.