191 votes

Comment personnaliser la couleur d'arrière-plan d'un UITableViewCell?

Je voudrais personnaliser l'arrière-plan (et peut-être la frontière trop) de tous les UITableViewCells dans mon UITableView. Jusqu'à présent, je n'ai pas été en mesure de personnaliser ce genre de choses, donc j'ai un tas de fond blanc de cellules qui est la valeur par défaut.

Est-il un moyen de le faire avec le SDK de l'iPhone?

206voto

N.Berendt Points 1855

Ici est le moyen le plus efficace que j'ai rencontré pour résoudre ce problème, utilisez la willDisplayCell délégué de la méthode (ce qui prend soin de la couleur blanche pour le texte de l'étiquette arrière-plan lors de l'utilisation de la cellule.textLabel.texte et/ou de la cellule.detailTextLabel.de texte):

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { ... }

Lors de ce délégué méthode est appelée la couleur de la cellule est contrôlée par la cellule plutôt que la vue de la table, comme lorsque vous utilisez:

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

Donc, dans le corps de la cellule délégué méthode ajoutez le code suivant à alterner les couleurs des cellules ou il suffit d'utiliser la fonction d'appel pour faire toutes les cellules de la table de la même couleur.

if (indexPath.row % 2)
{
    [cell setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]];
}
else [cell setBackgroundColor:[UIColor clearColor]];

Cette solution a bien fonctionné dans ma situation...

197voto

Ben Gottlieb Points 59900

Vous devez définir le backgroundColor de la cellule contentView à votre couleur. Si vous utilisez les accessoires (tels que la divulgation des flèches, etc), ils vont se présenter comme de blanc, de sorte que vous pouvez avoir besoin de rouler des versions personnalisées de ceux-ci.

105voto

Seba Points 921

C'est vraiment simple, depuis OS 3.0 il suffit de régler la couleur de fond de la cellule dans la willDisplayCell méthode. Vous ne devez pas définir la couleur de la cellForRowAtIndexPath.

Cela fonctionne pour les deux la plaine et regroupés style :

Code:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = [UIColor redColor];
}

P. S: Voici l'extrait de la documentation pour willDisplayCell :

"Une vue de la table envoie ce message à l' de son délégué, juste avant qu'elle utilise des cellules pour dessiner une ligne, permettant ainsi à la délégué pour personnaliser l'objet de cellule avant qu'il s'affiche. Cette méthode donne le délégué une chance de remplacer l'état définir les propriétés d' plus tôt par la vue de la table, tels que la sélection et la couleur d'arrière-plan. Après le délégué retourne, la vue de la table définit seulement l'alpha et l'image propriétés, puis seulement quand animation des lignes comme ils glissent ou ".

J'ai trouvé cette information dans ce post de colionel. Merci à lui!

59voto

Vladimir Grigorov Points 3306

La meilleure approche que j'ai trouvé pour l'instant est de définir un arrière-plan de la vue de la cellule et claire d'arrière-plan de la cellule sous-vues. Bien sûr, cela a l'air sympa sur les tables indexées seul style, peu importe avec ou sans accessoires.

Voici un exemple où la cellule de l'arrière-plan est souffla jaune:

UIView* backgroundView = [ [ [ UIView alloc ] initWithFrame:CGRectZero ] autorelease ];
backgroundView.backgroundColor = [ UIColor yellowColor ];
cell.backgroundView = backgroundView;
for ( UIView* view in cell.contentView.subviews ) 
{
    view.backgroundColor = [ UIColor clearColor ];
}

19voto

JAG Points 206

Simplement mettre cela en vous UITableView délégué fichier de classe (.m):


- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
  UIColor *color = ((indexPath.row % 2) == 0) ? [UIColor colorWithRed:255.0/255 green:255.0/255 blue:145.0/255 alpha:1] : [UIColor clearColor];
  cell.backgroundColor = color;
}

Profitez-en!

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