Je mets en place mon titre de contrôleur de vue comme celui-ci vu:
self.title = @"my title";
avant cela, je définissais le titre dans les story-boards du contrôleur de vue et du contrôleur de navigation dans lequel il est intégré.
Lorsque je clique sur l'onglet contenant le contrôleur de vue, le titre de l'élément de la barre d'onglets et uiviewcontroller
deviennent: mon titre.
Je souhaite que le contrôleur de vue change mais que l'élément de la barre d'onglets reste avec le titre suivant: Titre
Comment puis-je accomplir cela?
Il semble que vous souhaitiez que le titre de la barre de navigation change mais pas celui de la barre de tabulation. Cela devrait faire ça.
[self.navigationItem setTitle:@"my title"];
Rapide:
self.navigationItem.title = "My Title"
Donc pour ceux qui ne comprennent toujours pas (comme moi)
self.navigationItem.title = @"my title";
définit barre de navigation titre.
self.tabBarItem.title = @"my title";
définit barre d'onglets titre.
self.title = @"my title";
définit les deux .
Définir le titre de la barre supérieure
self.navigationController?.navigationBar.topItem?.title = "top title"
Définir le titre de l'élément de l'onglet
self.tabBarController?.tabBar.items?[0].title = "tab title"
Définir les deux titres
self.title = "both titles"
Pour Rapide utilisez ceci,
self.navigationItem.title = "Navigation bar title"
self.title = "Tab bar title"
Remarque: Si vous avez un contrôleur de barre d’onglet avec des contrôleurs de navigation à la racine de chaque contrôleur de vue, la définition de l’élément de barre de tabulation sur les contrôleurs de vue n’affectera pas le titre si vous définissez le navigationItem.title
. Vous devez définir la variable tabBarItem
sur le contrôleur de navigation à la place pour qu'elle soit prise dans le contrôleur de la barre d'onglets.
Aucune des réponses postées par d'autres n'a fonctionné pour moi, car les contrôleurs de vue de ma barre d'onglets ont tous des contrôleurs de navigation à la racine. Il s'agit d'un modèle de hiérarchie commun pour UITabBarController
. Vous devez définir la variable tabBarItem
du contrôleur de navigation à la place pour que le titre s'affiche différemment du titre de la variable navigationItem
.
Vous pouvez créer votre tabBarItem
et les associer directement à votre VC.
let tabBarVCOne = BooksListViewController()
tabBarVCOne.tabBarItem = UITabBarItem(title: "Books", image: nil, tag: 0)
tabBarViewControllers.append(tabBarVCOne)
...
Ensuite, vous aurez quelque chose comme ça:
//Wrap each view controller in a navigation controller.
self.viewControllers = tabBarViewControllers.map(UINavigationController.init)
Mais cela devrait être changé comme suit afin de récupérer la tabBarItem
déjà associée dans le contrôleur de vue et de la définir automatiquement sur le contrôleur de navigation.
self.viewControllers = tabBarViewControllers.map({
let navigationController = UINavigationController(rootViewController: $0)
navigationController.tabBarItem = $0.tabBarItem
return navigationController
})
Vous pourrez maintenant avoir un titre différent (défini à partir de votre VC) séparé du titre défini pour votre tabBarItem
.
Voilà, j'ai créé une extension pour 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
}
}
Et ensuite de votre contrôleur:
override func viewDidLoad() {
super.viewDidLoad()
setTitles(navigationTitle: "Login", tabBarTitle: "Home")
}
Probablement un peu tard (mais).
Définir le titre d'un VC modifie le titre de la navigation ET du tabBar . (Si le VC est déjà associé aux deux).
Si vous voulez avoir des titres séparés, vous devez les définir manuellement. Vous devez normalement définir le titre pour le VC, puis précisément le titre du tabBarItem, car il s'agit
Je crois en la méthode viewDidLoad
du contrôleur de vue que vous pouvez faire:
self.title = @"my title";
self.tabBarItem.title = @"tab title";
Assez tard pour ça. Vous pouvez utiliser votre TabBarController en tant que UITabBarControllerDelegate et UINavigationControllerDelegate pour lui-même et les contrôleurs de navigation intégrés dans chacun de vos onglets, respectivement.
.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";
...
}
Sur la base de quelques tests rapides, il semble que ces deux actions de délégué devraient couvrir les cas lâches et mettront à jour le titre, que vous changiez d'onglet ou que vous naviguiez dans votre contrôleur de navigation. Pour être complet, vous pouvez mettre à jour votre titre dans didShowViewController également, mais, d’après ce que j’ai vu, je ne pense pas que ce soit nécessaire.