Ответ 1
Похоже, вы хотите изменить заголовок на панели навигации, но не та, которая находится на панели. Это должно сделать это.
[self.navigationItem setTitle:@"my title"];
Swift:
self.navigationItem.title = "My Title"
Я устанавливаю свой заголовок диспетчера просмотров, как это было в режиме загрузки:
self.title = @"my title";
до этого я установил заголовок в досках рассказов для контроллера вида и контроллера навигации, в который он встроен. Я установил его: "Название";
Когда я нажимаю на вкладку, содержащую контроллер представления, заголовок элемента панели вкладок и uiviewcontroller
изменяется на: my title
Я бы хотел, чтобы контроллер вида изменился, но элемент панели вкладок остался с заголовком: Title
Как я могу это сделать?
Похоже, вы хотите изменить заголовок на панели навигации, но не та, которая находится на панели. Это должно сделать это.
[self.navigationItem setTitle:@"my title"];
Swift:
self.navigationItem.title = "My Title"
Итак, для тех, кто до сих пор не понял (как я)
self.navigationItem.title = @"my title";
устанавливает заголовок навигационной панели.
self.tabBarItem.title = @"my title";
устанавливает заголовок вкладки.
self.title = @"my title";
устанавливает оба этих.
Настроить заголовок заголовка
self.navigationController?.navigationBar.topItem?.title = "top title"
Задать название элемента вкладки
self.tabBarController?.tabBar.items?[0].title = "tab title"
Установите оба заголовка
self.title = "both titles"
Для Swift используйте это,
self.navigationItem.title = "Navigation bar title"
self.title = "Tab bar title"
Примечание. Если у вас есть контроллер панели вкладок с контроллерами навигации в корне каждого контроллера представления, установка элемента панели вкладок на контроллерах представления не повлияет на заголовок, если вы устанавливаете navigationItem.title
. Вам нужно будет установить tabBarItem
на контроллере навигации вместо этого, чтобы он был взят из контроллера панели вкладок.
Ни один из ответов, отправленных другими, не работал для меня, потому что все мои контроллеры представления панели вкладок имеют контроллеры навигации в своем корне - это общий шаблон иерархии для UITabBarController
. tabBarItem
этого необходимо установить контроллер навигации tabBarItem
чтобы заголовок отображался иначе, чем заголовок navigationItem
Вы можете создать свой tabBarItem
и связать их с вашим VC напрямую, вот так.
let tabBarVCOne = BooksListViewController()
tabBarVCOne.tabBarItem = UITabBarItem(title: "Books", image: nil, tag: 0)
tabBarViewControllers.append(tabBarVCOne)
...
Тогда у вас будет что-то вроде этого:
//Wrap each view controller in a navigation controller.
self.viewControllers = tabBarViewControllers.map(UINavigationController.init)
Но это должно быть изменено на следующее, чтобы tabBarItem
уже связанный tabBarItem
из контроллера представления и автоматически установить его на контроллер навигации.
self.viewControllers = tabBarViewControllers.map({
let navigationController = UINavigationController(rootViewController: $0)
navigationController.tabBarItem = $0.tabBarItem
return navigationController
})
Теперь вы сможете иметь другой заголовок (установленный из вашего VC) отдельно от заголовка, определенного для вашего tabBarItem
.
Я верю в метод viewDidLoad
контроллера вида, который вы можете сделать:
self.title = @"my title";
self.tabBarItem.title = @"tab title";
Довольно поздно. Вы можете использовать свой TabBarController как UITabBarControllerDelegate и UINavigationControllerDelegate для себя и контроллеров навигации, встроенных в каждую из ваших вкладок соответственно.
.h:
@interface YourTabBarController : UITabBarController <UITabBarControllerDelegate, UINavigationControllerDelegate>
@end
.m:
- (void) viewDidLoad {
// UITabBarControllerDelegate
self.delegate = self;
// UINavigationControllerDelegates
yourNavigationController.delegate = self;
...
}
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
yourNavigationController.tabBarItem.title = @"Tab Bar Title";
...
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
yourNavigationController.tabBarItem.title = @"Tab Bar Title";
...
}
На основе некоторого быстрого тестирования кажется, что эти два действия делегата должны охватывать любые свободные случаи и будут обновлять заголовок, переключаете ли вы вкладки или просматриваете в своем навигационном контроллере. Для полноты вы можете обновить свой заголовок в didShowViewController, но, основываясь на том, что я видел, я не думаю, что это необходимо.
Вероятно, немного поздно (но).
Установка заголовка VC изменяет заголовок навигации AND tabBar. (если VC уже привязан к обоим).
Если вы хотите иметь отдельные заголовки, вам нужно их вручную установить, вы обычно устанавливаете заголовок для VC, а затем, в частности, название tabBarItem, так как это свойство
Вот, пожалуйста, я создал расширение для UIViewController:
import UIKit
extension UIViewController {
/// Setting the navigation title and tab bar title
///
/// - Parameters:
/// - navigationTitle: Navigation title
/// - tabBarTitle: TabBar title
func setTitles(navigationTitle: String, tabBarTitle: String) {
// Order is important here!
title = tabBarTitle
navigationItem.title = navigationTitle
}
}
А потом с вашего контроллера:
override func viewDidLoad() {
super.viewDidLoad()
setTitles(navigationTitle: "Login", tabBarTitle: "Home")
}