Changer le nom de l'onglet dans uitabbarcontroller

J'ai un TabBarController défini comme l'onglet contrôleur principal, où les noms ont été définis en utilisant interface builder. Maintenant je voudrais changer ses noms programmatiquement.

Comment pourrait-il être fait?

31
demandé sur Kheldar 2011-08-31 02:11:47

7 réponses

mise à Jour de XCode 8

depuis ma réponse initiale, il s'est passé beaucoup de choses: Swift 3, Story-boards, etc. Le titre est habituellement celui que toutes les vues partagent, et peut être défini dans les attributs inspector

Title Setup

aussi, pour plus de contrôle, vous pouvez toujours faire glisser le UITabBarItem et UINavigationItem éléments de la vue du concepteur. Vous devez les faire glisser vers la vue qui sera affichée dans la barre d'onglets/contrôleur de navigation. Fondamentalement ils stockent les informations comme "je veux être affiché dans la barre d'onglet comme ça".

enter image description here

Hello Scene est d'obtenir un TabBarItem ajouté à elle, de sorte qu'il peut être configuré.

ces deux éléments se comportent exactement comme l'accès au contrôleur de vue .tabBarItem et .navigationItem propriétés par code. Ces propriétés existent toujours en code si elles sont enfant de l'objet correspondant (nav a navItem, et TabItem a TabItem), vous pas besoin de les ajouter dans storyboard/xib pour les avoir.

cette dernière chose est un peu déroutante, car dans le storyboard/xib il semble que vous les ajoutiez au contrôleur de vue, mais en vérité vous dites juste "le nib va configurer ces propriétés aussi".

Réponse Originale

Le nom qui apparaît sur la barre d'onglet vient de la UIViewControllertitle propriété

self.title = @"Name me!";

vous pouvez changer le titre à tout moment, et il devrait mettre à jour le texte figurant sur la barre d'onglet de l'élément. Mais méfiez-vous, le faire dès que possible, idéalement, dans le init méthode utilisée (ouinitWithNibName:bundle:, ou initWithCoder:).

la clé ici, c'est que les méthodes init sont appelées dès que la barre d'onglets apparaît à l'écran, car elle initialise tout son contrôleur de vue. Si vous le faites sur viewDidLoad, qui ne serait appelé que si vous sélectionnez l'onglet, puis une autre famille d'appels, même chose pour awakeFromNib,viewWillAppear:,viewDidAppear:, etc.

L'idée d'avoir un titre sur l' UIViewController, est de garder les choses cohérentes. Si vous montrez ce viewController sur un UINavigationController, la barre de navigation en haut doit utiliser la propriété title, comme elle le fait lors de l'utilisation de back. UITabBarController respecte également le même titre de propriété et change en conséquence.

en termes de réutilisabilité, vous ne devez définir le titre que depuis l'intérieur de UIViewController sous-classe.

Le chemin de la Plume

à l'aide de nibs ou story-boards? Si vous avez un UIViewController, vous pouvez lui donner le nom vers le haut dans les attributs de l'inspecteur (ou փփ4)

Using interface builder, in the Attributes Inspector

Malheureusement, si le Propriétaire du Fichier est UIViewController sous-classe, alors vous ne pourrez pas y accéder de cette façon, simplement parce que, XCode enregistre le propriétaire du fichier comme un "objet externe", et n'affiche pas de panneau de configuration pour lui. : (

titres multiples, même vue contrôleur

Mais parfois, vous voulez juste avoir un nom différent

// 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";

baiser avec les voisins

chaque contrôleur UIViewController devrait gérer son propre nom, et si vous voulez le forcer de l'extérieur (et donc, violant complètement la chose originale que j'ai dit à propos de la réutilisabilité)?

// 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"];

vous pourriez aussi probablement le faire avec l'élément de navigation, mais cela nécessiterait plus de gymnastique que je ne suis à l'aise avec.

42
répondu Can 2016-09-17 20:42:01

cependant il est possible de le faire en code, il est préférable de le mettre directement dans L'. Comment?

tapez simplement la barre d'onglets appropriéeà l'intérieur du contrôleur ( NOT INSIDE TABBAR CONTROLLER).

enter image description here

puis passez à attribute inspector sur le Utilitaires panneau.

enter image description here

Maintenant vous pouvez tout changer: -)

29
répondu Bartłomiej Semańczyk 2015-06-15 07:48:57

Dans votre 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;
}
2
répondu Stephan 2012-10-19 07:50:39

Swift 4+

tabBarController?.tabBar.items![1].title = "xx"
2
répondu Alfi 2018-03-26 04:25:41

C'est comment vous pouvez modifier le nom et l'image de l'icône de la barre d'onglets:

 self.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Main Tab" image:[UIImage imageNamed:@"maintab.png"]] autorelease];
1
répondu TommyG 2011-08-30 22:42:28

vous voulez probablement faire cela dans UITabBarController::viewDidLoad, auquel cas vous devez définir le titre du contrôleur de vue car les éléments de la barre d'onglets sont actuellement 0 à ce point. Donc, utiliser

[[self.viewControllers objectAtIndex:0] setTitle: @"Buga"];
[[self.viewControllers objectAtIndex:1] setTitle: @"Nuga"];
1
répondu RelativeGames 2012-10-01 05:53:07

j'utilise la Version 8.2.1 de Xcode (8C1002) et cela fonctionne pour moi:

enter image description here

-1
répondu Sebastián Lara 2017-05-05 00:13:27