Modifier le nom de l'onglet dans uitabbarcontroller

J'ai un onglet TabBarController en tant qu'onglet du controller principal, où les noms ont été définis en utilisant le constructor de l'interface. Maintenant, je voudrais changer ses noms par programme.

Comment pourrait-on le faire?

Mis à jour à XCode 8

Depuis ma réponse originale, beaucoup de choses se sont passées: Swift 3, Storyboards, etc. Le titre est généralement celui que toutes les vues partagent, et peut être défini dans l'inspecteur d'attributes

Configuration du titre

En outre, pour plus de contrôle, vous pouvez toujours faire glisser les éléments UINavigationItem et UINavigationItem partir de la vue du concepteur. Vous devez les faire glisser vers la vue qui sera affichée dans la barre d'tabs / le controller de navigation. Fondamentalement, ils stockent l'information comme "Je veux être affiché dans la barre d'onglet comme ça".

entrez la description de l'image ici

Bonjour Scène obtient un TabBarItem ajouté, donc il peut être configuré.

Ces deux éléments se comportent exactement comme l'access aux propriétés .tabBarItem et .navigationItem du controller de .tabBarItem via le code. Ces propriétés existent toujours dans le code si elles sont enfants de l'object correspondant (nav a navItem, et tab a tabItem), vous n'avez pas besoin de les append dans storyboard / xib pour les avoir.

Cette dernière chose est assez déroutante, car dans le storyboard / xib, il semble que vous les ajoutiez au controller de vue, mais en vérité, vous dites simplement "la plume va aussi configurer ces propriétés".

Réponse originale

Le nom qui apparaît dans la barre d'tabs provient de la propriété title UIViewController ,

 self.title = @"Name me!"; 

Vous pouvez changer le titre à tout moment, et il devrait mettre à jour le text apparaissant sur l'élément de la barre d'tabs. Mais attention, faites cela le plus tôt possible , idéalement, dans la méthode init utilisée (ou initWithNibName:bundle: initWithCoder: ou initWithCoder: .

La key ici est que les methods init sont appelées dès que la barre d'tabs apparaît à l'écran, car elle initialise tout son controller de vue. Si vous deviez le faire sur viewDidLoad , cela ne serait appelé que si vous select réellement l'onglet, alors l'autre famille d'appels, même chose pour awakeFromNib , viewWillAppear: awakeFromNib viewWillAppear: viewDidAppear: etc.

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

En termes de réutilisabilité, vous devez définir le titre uniquement depuis l'intérieur de la sous-class UIViewController .

Le path de la Nib

En utilisant des plumes ou des storyboards? Si vous avez un UIViewController , vous pouvez lui donner le nom directement dans l'inspecteur d'attributes (ou 4 )

Utilisation du générateur d'interface dans l'inspecteur des attributs

Malheureusement, si le propriétaire du file est la sous-class UIViewController , vous ne pourrez pas y accéder de cette façon, simplement parce que XCode enregistre le propriétaire du file en tant qu '"object externe" et n'affiche pas de panneau de configuration. 🙁

Plusieurs titres, même controller de vue

Mais parfois, vous voulez juste les nommer différemment

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

Visser avec les voisins

Chaque UIViewController devrait gérer son propre nom, et si vous voulez le forcer de l'extérieur (et donc, violer complètement la chose originale que j'ai dite sur 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 suis à l'aise avec.

Cependant il est possible de le faire en code, il est préférable de le paramétrer directement dans Storyboard . Comment?

Il suffit d'appuyer sur l'élément de la barre d'tabs approprié à l' intérieur du controller ( PAS DANS LE CONTRÔLEUR DE LA BARRE DE TABBAR ).

entrez la description de l'image ici

Passez ensuite à l' atsortingbute inspector dans le panneau Utilitaires .

entrez la description de l'image ici

Maintenant vous êtes capable de tout changer 🙂

Dans votre vueController.m

 - (id)initWithNibName:(NSSsortingng *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { //Here you are setting title self.title = NSLocalizedSsortingng(@"Title", @"Title"); } return self; } 

C'est ainsi que vous pouvez changer le nom et l'image de l'icône d'une barre d'tabs:

  self.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Main Tab" image:[UIImage imageNamed:@"maintab.png"]] autorelease]; 

Vous voulez probablement le faire dans UITabBarController :: viewDidLoad, auquel cas vous devez définir le titre du controller de vue, car les éléments de la barre d'tabs sont actuellement 0 à ce stade. Alors utilisez

 [[self.viewControllers objectAtIndex:0] setTitle: @"Buga"]; [[self.viewControllers objectAtIndex:1] setTitle: @"Nuga"]; 

J'utilise Xcode Version 8.2.1 (8C1002) et cela fonctionne pour moi:

entrez la description de l'image ici