Exploration du contrôleur de la barre d'onglets

Alors que les contrôleurs de navigation permettent aux utilisateurs de parcourir un contenu hiérarchique ou des données complexes en gérant une pile de contrôleurs de vue, les contrôleurs de barre d’onglet gèrent un ensemble de contrôleurs de vue qui n’ont pas nécessairement de relation. Dans cet article, nous allons explorer les contrôleurs de la barre d’onglet plus en détail en créant une application à onglets à partir de zéro..


introduction

le UITabBarController la classe est une autre UIViewController sous-classe. Alors que les contrôleurs de navigation gèrent une pile de contrôleurs de vue associés, les contrôleurs de barre d’onglet gèrent un tableau de contrôleurs de vue qui n’ont pas de relation explicite les uns avec les autres..

le L'horloge et La musique Les applications sur iOS sont deux exemples principaux de contrôleurs de barre d’onglet. Juste comme les autres UIViewController sous-classe, un contrôleur de barre d’onglet gère un UIView exemple.

La vue d'un contrôleur de barre d'onglets est composée de deux sous-vues:

  • la barre d'onglets au bas de la vue
  • la vue de l'un des contrôleurs de vue gérés par le contrôleur de barre d'onglets

Avant de commencer

Il y a quelques mises en garde à prendre en compte lors de l'utilisation de contrôleurs de barre d'onglets. Même si des cas de UITabBar ne peut afficher que cinq onglets, le UITabBarController La classe peut gérer plus de contrôleurs de vue. Lorsqu'un contrôleur de barre d'onglets gère plus de cinq contrôleurs de vue, le dernier onglet de la barre d'onglets est intitulé Plus.

Les contrôleurs de vue supplémentaires sont accessibles via cet onglet et il est même possible de modifier la position des onglets dans la barre d'onglets..

Bien que les contrôleurs de la barre d'onglets gèrent une vue, votre application n'est pas supposée interagir directement avec la vue d'un contrôleur de la barre d'onglets..

Si vous décidez qu'un contrôleur de barre d'onglets est le bon choix pour une application, le contrôleur de barre d'onglets doit être le contrôleur de vue racine de la fenêtre de l'application. En d'autres termes, la vue racine de la fenêtre de l'application est toujours la vue du contrôleur de la barre d'onglets. Un contrôleur de barre d’onglet ne doit jamais être installé en tant qu’enfant d’un autre contrôleur de vue. C’est l’une des principales différences avec les contrôleurs de navigation..


Bibliothèque à onglets

Dans cet article, nous revenons sur Bibliothèque application que nous avons construite dans l'article précédent. Ce faisant, nous pouvons réutiliser plusieurs classes et accélérer notre rythme. De plus, cela vous montrera que les contrôleurs de navigation et les contrôleurs de barre d’onglet sont très différents et qu’ils sont utilisés dans différentes situations et cas d’utilisation..

L'application que nous allons construire dans cette leçon sera nommée Bibliothèque à onglets et sera basé sur le UITabBarController classe. Pendant que nous construisons Bibliothèque à onglets vous remarquerez que l'utilisation d'un contrôleur de barre d'onglets force l'application dans un paradigme d'interface utilisateur très spécifique qui permet une faible flexibilité. Les contrôleurs de la barre d'onglets sont extrêmement utiles, mais vous devez accepter le fait qu'ils imposent des contraintes sur l'interface utilisateur de votre application..

Ouvrez Xcode, créez un nouveau projet (Fichier> Nouveau> Projet… ) et sélectionnez le Application vide modèle.

Nommez le projet Bibliothèque à onglets, attribuer un nom d'organisation et un identifiant d'entreprise, et définir Dispositifs à iPhone. Indiquez à Xcode où vous souhaitez enregistrer le projet et appuyez sur Créer.

Même si Xcode comprend un Application à onglets modèle, je préfère commencer par un modèle d’application vide afin que vous compreniez comment les différentes pièces du puzzle s’emboîtent. Vous remarquerez que les contrôleurs de tabulation ne sont pas si compliqués.


Prendre une longueur d'avance

Quand le Bibliothèque à onglets l'application est terminée, le contrôleur de la barre d'onglets de l'application gère six contrôleurs de vue. Au lieu de créer chaque classe de contrôleur de vue à partir de zéro, nous allons tromper un peu en réutilisant les classes de contrôleur de vue que nous avons créées dans l'article précédent.

De plus, nous allons créer plusieurs instances de la même classe de contrôleur de vue pour nous faire gagner du temps. Le but de cet article n'est pas de créer un groupe de classes de contrôleur de vue. À ce stade, vous devriez être assez au courant de la façon dont cela fonctionne.

Téléchargez le code source de l'article précédent et ouvrez le projet Xcode inclus dans les fichiers source dans une nouvelle fenêtre du Finder. Trouvez le TSPAuthorsViewControllerTSPBooksViewController, et TSPBookCoverViewController classes et faites-les glisser vers votre nouveau projet. Assurez-vous de copier les fichiers dans le nouveau projet en cochant la case intitulée Copier des éléments dans le dossier du groupe de destination (si nécessaire) et n'oubliez pas d'ajouter les fichiers au Bibliothèque à onglets cible.

En plus de ces trois classes, nous devons également copier le dossier de ressources, contenant Books.plist et les fichiers d'image, dans notre nouveau projet. Faites glisser le dossier nommé Ressources dans notre projet et utiliser les mêmes paramètres que nous avons utilisé pour copier les fichiers de classe. Nous sommes maintenant prêts à instancier le contrôleur de la barre d'onglets de l'application et à le remplir avec son premier contrôleur de vue..


Ajout d'un contrôleur de barre d'onglets

L'ajout d'un contrôleur de barre d'onglets est facile. Ouvrez le scénario principal du projet, Tableau principal. Attends une minute. Où est mon story-board? Parce que nous avons opté pour le Application vide modèle, Xcode ne nous a pas donné de story-board.

Ajout d'un storyboard

Sélectionner Nouveau> Fichier… du Fichier menu et choisir Storyboard du Interface utilisateur iOS catégorie à gauche.

Ensemble Famille de périphérique à iPhone et nommer le storyboard Principale. Il n'y a pas besoin d'ajouter le .story-board extension. Xcode l'ajoutera pour vous.

Nous devons également dire à Xcode qu'il doit utiliser Tableau principal comme interface principale de l'application. Sélectionnez le projet dans le Navigateur de projet, choisir la Bibliothèque à onglets cible de la liste des cibles, et définir Interface principale à Principale ou Tableau principal.

Avant de commencer à utiliser le storyboard, nous devons mettre à jour la mise en œuvre actuelle de application: didFinishLaunchingWithOptions: dans le TSPAppDelegate classe. Ouvrir TSPAppDelegate.m et mettre à jour l'implémentation comme indiqué ci-dessous.

- (BOOL) application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions return YES; 

Vous pouvez créer des applications iOS sans storyboard, mais cela signifie que vous devez instancier explicitement la fenêtre de votre application, ce que vous avez vu lors de l'implémentation de. application: didFinishLaunchingWithOptions:. Lorsque vous travaillez avec des story-boards, vous retournez simplement OUI et le storyboard fait le reste.

Ajout d'un contrôleur de barre d'onglets

Ouvrir Tableau principal et faites glisser un UITabBarController exemple de la Bibliothèque d'objets sur la droite. Par défaut, le contrôleur de barre d’onglet est fourni avec deux contrôleurs de vue. Cependant, je veux illustrer la façon dont vous pouvez ajouter manuellement des contrôleurs de vue au contrôleur de la barre d'onglets. Sélectionnez donc les contrôleurs de vue (et non le contrôleur de la barre d'onglets) et supprimez-les du scénario..

Si vous exécutez l'application dans le simulateur iOS, vous devriez utiliser une barre de tabulation en bas et un arrière-plan noir. Cela peut sembler sans importance, mais cela montre le fonctionnement du contrôleur de la barre d’onglet. Le contrôleur de barre d’onglet gère un tableau de contrôleurs de vue, similaire à la façon dont un contrôleur de navigation gère une pile de contrôleurs de vue..

Ce que nous devons faire est d’ajouter quelques contrôleurs de vue au storyboard et de les ajouter à la viewControllers propriété du contrôleur de la barre d’onglet. Voyons comment cela fonctionne.

Ajout de contrôleurs de vue

Faites glisser un UITableViewController exemple de la Bibliothèque d'objets à l'espace de travail et définir sa classe à TSPAuthorsViewController dans le Inspecteur d'identité. Sélectionnez la vue table du contrôleur de vue et définissez le nombre de Cellules Prototype à 0 dans le Inspecteur d'attributs comme nous l'avons fait dans le précédent tutoriel.

Pour ajouter le contrôleur de vue d'auteur à la série de contrôleurs de vue du contrôleur de barre d'onglets, faites glisser le contrôleur de barre d'onglets vers le contrôleur de vue d'auteurs tout en maintenant le bouton de la souris enfoncé. Contrôle clé. Sélectionner voir les contrôleurs-sous le Relation Segue catégorie-du menu qui apparaît.

Un contrôleur de barre d’onglet avec un seul onglet n’est pas très utile, alors ajoutons un autre contrôleur de vue au mixage. Faites glisser un autre UITableViewController exemple de la Bibliothèque d'objets, mettre sa classe à TSPBooksViewController, et définir le nombre de Cellules Prototype à 0. Créez le lien de relation comme nous l'avons fait pour le contrôleur de vue des auteurs.

Ajouter un UIViewController instance à l'espace de travail et définir sa classe à TSPBookCoverViewController dans le Inspecteur d'identité. Ajoutez une instance de UIImageView au contrôleur de vue, comme nous l’avions fait dans l’article précédent, et connectez-la au bookCoverView sortie du contrôleur de vue. Créez le lien de relation avec le contrôleur de barre d’onglet comme nous l’avons fait pour les contrôleurs de vue tableau.

Vous ne pouvez créer des segments que lorsque l'espace de travail n'est pas zoomé, ce qui peut parfois poser problème. Cependant, vous pouvez également créer des connexions, telles que des divisions, dans le navigateur de gauche. C'est souvent beaucoup plus facile et moins maladroit.

Créez et exécutez l'application. À ce stade, la barre d'onglets contient trois onglets. Taper sur un onglet affiche le contrôleur de vue associé à l'onglet.

Avez-vous essayé d'appuyer sur le nom d'un auteur dans la vue des auteurs? Et pourquoi le contrôleur de vue des livres nous montre-t-il une vue de table vide? C'est l'heure du débogage.

Correction du contrôleur de vue des auteurs

Lorsque vous appuyez sur le nom d'un auteur dans le contrôleur de la vue d'auteurs, l'application se bloque. La première chose à faire en cas de plantage est d'inspecter la console Xcode. C'est ce que ça me dit:

2014-03-27 12: 42: 07.964 Bibliothèque à onglets [1943: 60b] *** Application terminée en raison d'une exception non capturée 'NSInvalidArgumentException', raison: 'Récepteur () n'a pas de nom avec l'identifiant 'BooksViewController "

Le message affiché par Xcode dans la console n’est pas difficile à déchiffrer. Nous disons au contrôleur de vue de réaliser un classement avec identifiant BooksViewController, mais cette ligue n'existe pas. Le résultat est un crash.

Ce bogue est facile à corriger en incorporant le contrôleur de la vue des auteurs dans un contrôleur de navigation, en créant une transition vers une instance de la classe TSPBooksViewController et en nommant la séquence. BooksViewController. Je vous laisse cela comme une tâche puisque nous l'avons déjà fait dans l'article précédent.

Le problème le plus important dans cet exemple est de comprendre que les trois contrôleurs de vue liés au contrôleur de la barre de tabulation ne communiquent pas entre eux. L'idée derrière un contrôleur de barre d'onglets et un contrôleur de navigation est très différente. Un contrôleur de navigation gère un tableau de contrôleurs de vue, la pile de navigation. Les contrôleurs de vue de la pile de navigation ont une relation implicite les uns avec les autres en ce sens qu'ils font partie de la même pile de navigation..

Un contrôleur de barre d’onglet gère également un tableau de contrôleurs de vue, mais ceux-ci ne se connaissent pas. Ils ne peuvent pas communiquer entre eux via le contrôleur de la barre d’onglet. Dans l'article précédent, nous avons transféré les données du contrôleur de vue d'auteurs au contrôleur de vue de livres lorsqu'un auteur a été sélectionné. Ce modèle n'est pas applicable dans un contrôleur de barre d'onglets. Bien sûr, nous pourrions implémenter une solution pour montrer à l'utilisateur le contrôleur de vue des livres lorsqu'un auteur est engagé dans le contrôleur de la vue des auteurs, mais il est important que vous compreniez que ce n'est pas l'objectif d'un contrôleur de barre d'onglets..

Les applications Clock et Music sur iOS illustrent bien l’utilisation d’un contrôleur de barre de tabulation. Les contrôleurs de vue gérés par le contrôleur de barre d’onglet dans l’application Musique n’ont aucune relation les uns avec les autres, mis à part le fait qu’ils affichent des morceaux..

Avant de continuer, assurez-vous de bien comprendre les concepts de contrôleur de navigation et de contrôleur de barre d’onglet, car ils sont importants plus tard dans cette série..


Ajout d'un autre contrôleur de vue de table

Ajoutons un quatrième contrôleur de vue au contrôleur de barre d’onglet qui affiche chaque livre Books.plist. Créer un nouveau UITableViewController sous-classe et nommez-le TSPAllBooksViewController.

Ce contrôleur de vue extraira tous les livres de Books.plist et les afficher par ordre alphabétique dans une vue de tableau. Ouvrir TSPAllBooksViewController.m et ajouter une nouvelle propriété livres de type NSArray à l'extension de classe en haut.

#import "TSPAllBooksViewController.h" @interface TSPAllBooksViewController () @property NSArray * books; @fin

Dans le contrôleur de vue viewDidLoad méthode, nous invoquons extraits de livres, une méthode d'assistance que nous allons implémenter sous peu. J'essaie généralement de garder viewDidLoad aussi concis que possible en encapsulant les tâches dans des méthodes d'assistance telles que extraits de livres. Cela rend le code plus facile à lire et plus facile à gérer.

- (void) viewDidLoad [super viewDidLoad]; // Set Title self.title = @ "Livres"; // Extraire des livres self.books = [self extractBooks]; 

Inspectons la mise en œuvre de extraits de livres. Nous commençons par créer un tableau mutable auquel nous ajouterons les livres de chaque auteur dans la liste des propriétés. Les deux lignes suivantes devraient vous être familières si vous avez lu l'article précédent. Nous demandons au paquet d’application le chemin du fichier de Books.plist et l'utiliser pour charger le contenu de Books.plist dans un tableau nommé auteurs. Nous parcourons ensuite le tableau des auteurs et ajoutons les livres de chaque auteur au tableau mutable que nous avons créé précédemment. Pour trier le tableau de livres, nous créons un descripteur de tri avec une clé de Titre. Après avoir trié les livres par titre, un nouveau tableau est créé., résultat, en triant le tableau mutable à l'aide du descripteur de tri. Nous retournons la liste triée de livres.

- (NSArray *) extractBooks // Buffer NSMutableArray * buffer = [[NSMutableArray alloc] init]; // Charger les auteurs NSString * filePath = [[NSBundle mainBundle] pathForResource: @ "Books" ofType: @ "plist"]; NSArray * authors = [NSArray arrayWithContentsOfFile: filePath]; pour (int i = 0; i < [authors count]; i++)  NSDictionary *author = [authors objectAtIndex:i]; // Add Books to Buffer [buffer addObjectsFromArray:[author objectForKey:@"Books"]];  // Sort Books Alphabetically NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"Title" ascending:YES]; NSArray *result = [buffer sortedArrayUsingDescriptors:@[sortDescriptor]]; return result; 

Trier les descripteurs, les instances de NSSortDescriptor, sont utilisés pour trier des collections d'objets, tels que des tableaux, en spécifiant la propriété devant être utilisée pour comparer deux objets de la collection. Vous pouvez ignorer en toute sécurité cette partie de la mise en œuvre de extraits de livres si ce n'est pas tout à fait clair, parce que ce n'est pas important dans le cadre de cette leçon.

Les implémentations de la UITableViewDataSource méthode du protocole est très similaire à ce que nous avons vu plus tôt dans cette série. Prenez un moment pour inspecter la mise en œuvre de chaque méthode ci-dessous.

- (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView return 1; 
- (NSInteger) tableView: (UITableView *) numéro de la table (numéro de vue) de la section (): section (NSInteger) section return [self.books count]; 
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath // Suppression de la cellule réutilisable UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier pourIndexPath: // Récupération du livre NSDictionary * book = [self.books objectAtIndex: [rangéeIndexPath]]; // Configurer une cellule [cell.textLabel setText: [book objectForKey: @ "Title"]]; cellule de retour; 

Comme nous l'avons vu dans la leçon sur les vues de table, nous devons déclarer l'identificateur de réutilisation de cellule et enregistrer une classe pour l'identificateur de réutilisation de cellule..

@implementation TSPAllBooksViewController static NSString * CellIdentifier = @ "Identificateur de cellule";
- (void) viewDidLoad [super viewDidLoad]; // Set Title self.title = @ "Livres"; // Extraire des livres self.books = [self extractBooks]; // Classe de registre pour la réutilisation de cellules [self.tableView registerClass: [classe UITableViewCell] forCellReuseIdentifier: CellIdentifier]; 

Avec la nouvelle classe de contrôleurs de vue prête à être utilisée, revenez au storyboard, faites glisser un UITableViewController exemple de la Bibliothèque d'objets, et mettre sa classe à TSPAllBooksViewController. Avec la vue tableau sélectionnée, définissez le nombre de Cellules Prototype à 0 dans le Inspecteur d'attributs. Avant d'exécuter l'application dans le simulateur iOS, créez le lien de relation entre le contrôleur de barre d'onglets et le contrôleur d'affichage de table que nous venons d'ajouter..

Générez et exécutez le projet pour voir le résultat de notre dur labeur. Si vous avez le souci du détail, vous avez peut-être remarqué que le titre du quatrième onglet n'apparaît que lorsque cet onglet est sélectionné. Pouvez-vous deviner pourquoi c'est?


Voir ne… pas charger

La cause de cette bizarrerie bizarre est en réalité assez simple. En général, une vue n'est pas chargée en mémoire avant qu'elle ne soit absolument nécessaire. Cela signifie généralement qu'une vue est chargée en mémoire au moment de la montrer à l'utilisateur..

Quand le Bibliothèque à onglets L'application est lancée, le premier onglet est sélectionné par défaut. Tant que le quatrième onglet n'est pas sélectionné, par l'utilisateur ou par programme, il n'est pas nécessaire de charger la vue du quatrième contrôleur de vue. En conséquence, le viewDidLoad la méthode n'est appelée que lorsque le quatrième onglet est sélectionné, ce qui signifie que le titre n'est défini que lorsque le quatrième onglet est sélectionné.

La solution est simple Une meilleure approche consiste à définir le titre du contrôleur de vue lorsque celui-ci est initialisé. Si nous définissons le titre dans la classe init méthode, nous pouvons être sûrs que le titre du contrôleur de vue est défini dans le temps.

Ouvrir TSPAllBooksViewController.m et ajoutez une méthode nommée initWithCoder: comme indiqué ci-dessous. Cette méthode est appelée par le système d'exploitation pour créer une instance de la classe..

- (id) initWithStyle: (UITableViewStyle) style self = [super initWithStyle: style]; if (self) // Set Title self.title = @ "Livres";  retourner soi-même; 

C’est également un bon moment pour inspecter le flux d’un init méthode. Une méthode d’initialisation commence généralement par un appel à init méthode de la superclasse, dans ce casinitWithCoder:. J’ai insisté sur l’importance de cet aspect lorsque nous avons discuté de laviewDidLoad méthode plus tôt dans cette série. Le résultat de [super initWithCoder: un décodeur] est assigné à soi, l'instance de la classe avec laquelle nous travaillons.

Dans l'étape suivante, nous vérifions que soi n'est pas néant. Si soi est mis-pas néant-il est temps de configurer davantage l'instance de la classe, soi. Une méthode d’initialisation doit toujours renvoyer l’instance de la classe ou néant si quelque chose a mal tourné.

dans le si déclaration dans initWithCoder: nous définissons le contrôleur de vue Titre propriété pour résoudre le problème, j'ai discuté il y a un instant.

C'était beaucoup de théorie pour résoudre un problème trivial. Cependant, l’explication ci-dessus constitue une bonne introduction à un autre élément important des contrôleurs de barre d’onglet., éléments de la barre d'onglets. Pour l'instant, les onglets de la barre d'onglets affichent uniquement le titre de chaque contrôleur de vue ou, dans le cas des deuxième et troisième contrôleurs vier, un titre par défaut de Article. Dans la plupart des applications, les onglets affichent également une petite icône indiquant la fonction ou l'objectif du contrôleur de vue situé sous l'onglet. Voyons comment implémenter ceci.


Articles de barre d'onglets

Dans la leçon précédente, j'ai écrit que chaque contrôleur de vue d'une pile de navigation conserve une référence au contrôleur de navigation gérant la pile. Il en va de même pour les contrôleurs de vue gérés par un contrôleur à barre d'onglets. Un contrôleur de vue géré par un contrôleur de barre d’onglet conserve une référence au contrôleur de barre d’onglet dans sa tabBarController propriété.

En plus de ces propriétés, un contrôleur de vue a aussi un tabBarItem propriété, une instance unique du UITabBarItem classe. Cette propriété est utilisée lorsque le contrôleur de vue est un enfant d'un contrôleur de barre d'onglets. Un élément de la barre d'onglets a un titre, une image et une balise. La balise est juste un entier qui peut être utilisé pour identifier un élément de la barre de tabulation dans la barre de tabulation. Par défaut, le titre de l'élément de la barre d'onglets est hérité de la propriété title du contrôleur de vue. C'est pourquoi le premier et le dernier onglet du Bibliothèque à onglets les applications portent le titre de leur contrôleur de vue respectif.

Ouvrir TSPAuthorsViewController.m et ajoutez une méthode nommée initWithCoder: comme indiqué ci-dessous.

- (id) initWithCoder: (NSCoder *) aDecoder self = [super initWithCoder: aDecoder]; if (self) // Set Title self.title = @ "Authors"; // Définir l'élément de la barre d'onglets self.tabBarItem = [[UITabBarItem alloc] initWithTitle: @ "Authors" image: [UIImage imageNamed: @ "icon-authors"] tag: 0];  retourner soi-même; 

Nous créons un élément de barre d'onglets et l'attribuons à celui du contrôleur de vue tabBarItem propriété. L'initialiseur du UITabBarItem la classe accepte un titre (NSString), une image (UIImage) et une balise (NSInteger). Avant de créer et d’exécuter le projet, téléchargez les fichiers source de cette leçon et faites-les glisser icon-authors.png et [email protected] dans votre projet. Comme vous vous en souvenez peut-être, le fichier avec le @ 2x suffixe cible les appareils avec un écran Retina, alors que le fichier sans le @ 2x le suffixe cible les périphériques non rétiniens.

Notez qu'il n'est pas nécessaire de spécifier l'extension du fichier image lorsque vous utilisez la méthode class imageNamed: de UIImage. En général, vous n'avez pas besoin de spécifier quelle version du fichier-rétine ou non-rétine-utiliser. En fonction du nom de fichier et du matériel du périphérique, le système d'exploitation décide de la version à utiliser..

J'ai également déplacé l'attribution de titre à la initWithCoder: méthode comme nous l'avons fait dans le TSPAllBooksViewController classe. Exécutez l'application une fois de plus pour voir le résultat.

Nous pouvons faire la même chose pour le TSPAllBooksViewController classe. Ouvrir MTAllBooksViewController.m et mettre à jour le initWithCoder: méthode comme indiqué ci-dessous.

- (id) initWithCoder: (NSCoder *) aDecoder self = [super initWithCoder: aDecoder]; if (self) // Set Title self.title = @ "Livres"; // Définir l'élément de barre d'onglets self.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem: UITabBarSystemItemContacts tag: 1]; // Définir la valeur du badge [self.tabBarItem setBadgeValue: @ "12"];  retourner soi-même; 

En plus de définir le titre du contrôleur de vue, nous définissons son tabBarItem propriété. Cependant, cette fois, nous utilisons initWithTabBarSystemItem: balise: pour configurer l’élément de barre d’onglet. Vous pouvez utiliser cette méthode si vous souhaitez utiliser un élément de barre d’onglet fourni par le système. Le premier argument de cette méthode, UITabBarSystemItem, détermine à la fois le titre et l'image de l'élément de la barre d'onglets.

Il est également possible de donner à un élément de la barre d’onglet une valeur de badge comme indiqué dans l’implémentation ci-dessus de initWithCoder:. La valeur du badge devrait être un NSString exemple.

Lorsque vous travaillez avec des contrôleurs de barre d’onglet, gardez à l’esprit que c’est le contrôleur de vue racine de chaque onglet qui détermine l’apparence de l’élément de barre d’onglet de l’onglet correspondant. Par exemple, si un contrôleur de barre d’onglet gère un contrôleur de navigation avec plusieurs contrôleurs de vue, il s’agit de l’élément de barre de navigation du contrôleur de vue racine du contrôleur de navigation utilisé par la barre d’onglet du contrôleur de navigation. le UITabBarItem La classe a quelques autres méthodes pour personnaliser davantage l'apparence d'un élément de la barre d'onglets..


Plus de contrôleurs de vue

Avant de terminer cet article, j'aimerais vous montrer comment se présente la barre d'onglets lorsque son contrôleur gère plus de cinq contrôleurs de vue. Comme je l'ai mentionné précédemment, seuls cinq onglets sont affichés à la fois, mais le contrôleur de barre d'onglets prend en charge la gestion de plus de cinq contrôleurs de vue enfant..

Ouvrez le scénario principal et ajoutez deux autres instances de UITableViewController. Créez une séquence de relations pour chaque contrôleur d'affichage de table et exécutez l'application dans le simulateur iOS pour voir le résultat..

Les contrôleurs de vue supplémentaires que nous avons ajoutés ne sont pas très utiles, mais ils montrent comment un contrôleur à barres de tabulation gère plus de cinq contrôleurs de vue enfant. Les contrôleurs de barre d’onglet donnent accès aux cinquième et sixième contrôleurs de vue du contrôleur de barre d’onglet. L'utilisateur a même eu la possibilité de modifier les positions des contrôleurs de vue dans la barre d'onglets..


Conclusion

Il est important de comprendre que le UITabBarController et UINavigationController les classes représentent chacune un paradigme d'interface utilisateur unique. Cet article montre également qu'il n'est pas difficile de maîtriser les contrôleurs de la barre d'onglets une fois que vous avez compris les composants impliqués..

Dans le prochain article, nous examinerons la persistance des données sur iOS et les options que vous avez en tant que développeur..