2010-05-06 4 views
1

Je cherche à personnaliser l'apparence d'une barre d'onglets. Plus précisément, je veux:Comment personnaliser l'apparence d'une barre d'onglets?

  • Modifier la valeur par défaut tabBar couleur
  • Ajouter une image personnalisée au-dessus de la tabBar
  • Ajouter des images personnalisées à tabBarButtons
  • Modifier la police tabBarButtons

En un mot, je veux toutes les fonctionnalités d'une barre d'onglets mais avec un look complètement personnalisé.

Devrais-je commencer à sous-classer des éléments, ou à utiliser des catégories ou quoi?

Répondre

1

Face à cette situation, je viens d'écrire une classe personnalisée (sous-classe UIViewController) et des boutons utilisés comme objet de l'interface utilisateur avec laquelle l'utilisateur interagit. Avec cette technique, vous pouvez être assez agressif dans la gestion de la mémoire, en supprimant et en recréant les onglets inutilisés d'une manière que le UITabViewController ne gère pas. Le seul endroit que je n'ai pas couvert était le plus ... swap dans une vue de la table - mais alors je ne voulais pas non plus vraiment!

EDIT ... Il n'y a pas de code réutilisable en tant que tel. Pour chaque onglet, utilisez simplement un bouton personnalisé comme vous le souhaitez. J'ai trois états pour chaque bouton normal (désélectionner), pressé (activé) et courant (désactivé). Mon handupinside handler change les boutons normaux et pressés comme requis en appelant les boutons gris-vert et en passant l'étiquette du bouton.


- (void) greytherightbuttons:(int)n { 


    switch (n) { 
     case 0: 
      [b0 setImage:[UIImage imageNamed:@"btn_gallery_your_designs_off.png"] forState:UIControlStateNormal]; 
      [b1 setImage:[UIImage imageNamed:@"btn_gallery_recent_editions_deselect.png"] forState:UIControlStateNormal]; 
      [b2 setImage:[UIImage imageNamed:@"btn_gallery_highest_rated_deselect.png"] forState:UIControlStateNormal]; 
      break; 
     case 1: 
      [b0 setImage:[UIImage imageNamed:@"btn_gallery_your_designs_deselect.png"] forState:UIControlStateNormal]; 
      [b1 setImage:[UIImage imageNamed:@"btn_gallery_recent_editions_off.png"] forState:UIControlStateNormal]; 
      [b2 setImage:[UIImage imageNamed:@"btn_gallery_highest_rated_deselect.png"] forState:UIControlStateNormal];   
      break; 

     case 2: 
      [b0 setImage:[UIImage imageNamed:@"btn_gallery_your_designs_deselect.png"] forState:UIControlStateNormal]; 
      [b1 setImage:[UIImage imageNamed:@"btn_gallery_recent_editions_deselect.png"] forState:UIControlStateNormal]; 
      [b2 setImage:[UIImage imageNamed:@"btn_gallery_highest_rated_off.png"] forState:UIControlStateNormal]; 

      break; 
     default: 
      break; 
    } 

} 

L'étape suivante consiste à permuter dans la vue correcte.

La façon dont vous changez d'affichage dépend de la façon dont vous voulez créer les vues, mais ce n'est pas plus compliqué que alloc/initWithFrame votre nouveau contrôleur de vue. [self.view addSubview: newvc.view], puis supprimez-le de la vue et supprimez-le lorsque vous changez d'onglet.

+0

Merci pour la réponse Andiih. Pourriez-vous avoir un exemple de code, ou un peu plus de détails sur la solution? –

Questions connexes