47 votes

Comment changer la couleur de l'alphabet latéral dans une UITableView indexée ?

J'ai une vue tableau avec un index alphabétique et j'utilise l'alphabet latéral pour parcourir rapidement la liste. Pour ceux qui ne sont pas familiers, cela utilise ceci :

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {

Mon problème est que mon application vient d'être dépecée en noir. Et donc maintenant il est difficile de voir les lettres de l'alphabet sur le côté.

Je n'arrive pas à trouver comment changer la couleur de l'alphabet. J'aimerais qu'il soit blanc si possible.

61voto

sunkehappy Points 4423

Si votre version minimale d'iOS est plus récente que 6.0, vous pouvez utiliser sectionIndexColor propriété de UITableView .

La couleur à utiliser pour le texte de l'index de la vue tableau.

@property(nonatomic, retain) UIColor *sectionIndexColor

Discussion :

Les vues de tableaux peuvent afficher un index sur le côté de la vue, ce qui facilite la navigation des utilisateurs. plus facile pour les utilisateurs de naviguer rapidement dans le contenu du tableau. Cette propriété spécifie la couleur à utiliser pour le texte affiché dans cette région.


Date de mise à jour 2014.1.13

Je trouve une bibliothèque tierce open source : GDIIndexBar pour aider à personnaliser l'apparence de l'index.

1 votes

Réponse parfaite ! Merci pour cela.

0 votes

Parfait... Fonctionne comme un charme :)

0 votes

Cool. Je ne sais pas trop pourquoi, mais dans iOS 8.1, la couleur par défaut du texte et de l'arrière-plan de l'index était bleu sur bleu. Grâce à votre astuce, j'ai pu changer le "self.tableView.sectionIndexBackgroundColor" en un fond blanc.

32voto

paulthenerd Points 6568

D'après ce que je peux dire, il n'est malheureusement pas possible de personnaliser la couleur du texte affiché dans l'index, le plus proche que j'ai pu faire est de pouvoir modifier la couleur de fond et la police de l'index.

Il y a du code dans le iPhone Developers cookbook d'Erica Sadun qui montre comment accéder à la vue UITableViewIndex (une classe non documentée). Vous pouvez en trouver la référence à la page 175 du livre si vous l'avez. Qui donne accès à la couleur de fond et à la police. Vous pouvez voir un document non officiel relatif à cette classe aquí .

AVERTISSEMENT Il s'agit d'une utilisation non documentée d'une classe non documentée, vous devez donc être prudent dans son utilisation.

Voici un extrait de code tiré du livre de recettes avec des modifications mineures :

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {    

  for(UIView *view in [tv subviews])
  {
    if([[[view class] description] isEqualToString:@"UITableViewIndex"])
    {

      [view setBackgroundColor:[UIColor whiteColor]];
      [view setFont:[UIFont systemFontOfSize:14]];
    }
  }

  //rest of cellForRow handling...

} 

Ceci illustre comment vous pouvez accéder à la vue UITableViewIndex et la modifier sous certains aspects. Il semble que la vue n'ait pas de sous-vues et qu'elle fasse probablement un dessin personnalisé avec le tableau des titres d'index.

Ce n'est pas parfait mais j'espère que ça aidera un peu.

Paul

3 votes

L'itération ci-dessus peut être mise en œuvre dans la méthode : -(void)viewDidAppear :(BOOL)animated ; Cela évitera de répéter l'itération chaque fois que vous faites défiler le tableView.

1 votes

Cette méthode a juste changé la couleur de fond des index pour moi. Que faire si je veux changer la couleur des polices uniquement et non celle de leur fond ?

1 votes

@DipDhingani pour changer la couleur des polices (en rouge dans cet exemple), utilisez ceci : [view performSelector:@selector(setIndexColor :) withObject :[UIColor redColor]] ;

21voto

Jeely Points 871

Cela peut être facilement modifié dans le constructeur d'interface pour le UITableView - Pas besoin d'utiliser des classes non documentées ?

Voir la capture d'écran ci-dessous, comme vous pouvez le voir, la couleur de la police et la couleur de l'arrière-plan peuvent également être modifiées. Le travail est bon !

11voto

Mogglas Points 111

J'avais le même problème et je viens de trouver un moyen de le faire, bien que cela utilise des classes et des méthodes non documentées, alors réfléchissez une fois de plus avant d'essayer de le télécharger sur l'App Store. Je dois préciser que je n'ai essayé qu'avec iOS5 et que je ne sais pas si cela fonctionne pour les versions précédentes.

J'ai emprunté et modifié l'exemple du livre de recettes d'Erica Saunders de sorte qu'il change maintenant la couleur du texte en rouge :

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {    

  for(UIView *view in [tv subviews])
  {
    if([[[view class] description] isEqualToString:@"UITableViewIndex"])
    {
      [view performSelector:@selector(setIndexColor:) withObject:[UIColor redColor]];
    }
  }

  //rest of cellForRow handling...

}

11voto

Magnus Points 1467

Nous avons utilisé avec succès le code suivant :

for(UIView *view in [tableView subviews]) {
    if([view respondsToSelector:@selector(setIndexColor:)]) {
        [view performSelector:@selector(setIndexColor:) withObject:[UIColor whiteColor]];
    }
}

qui fonctionne bien - elle est très similaire à la réponse de Mooglas - mais s'abstient d'utiliser le mot "UITableViewIndex".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X