2010-11-10 6 views
30

J'ai créé un groupe de cellules que je réutilise dans une vue de table. Toutes ces cellules ont juste UILabel s à l'intérieur et certains UIImageView s (rien ne couvre la cellule complète).Impossible de définir la couleur d'arrière-plan de UITableViewCell dans IB

La définition de la couleur d'arrière-plan dans IB n'a aucun effet (toujours blanche ou transparente, ne peut pas dire lequel d'entre eux). Mais si j'appuie sur Commande-R (interface de simulation), la cellule a la couleur d'arrière-plan correcte dans le simulateur.

J'ai essayé de le définir dans tableView:cellForRowAtIndexPath: mais cela ne fonctionne pas comme je le pense non plus.

Cela fait le tour:

cell.contentView.backgroundColor = [UIColor redColor]; 

mais ceux-ci ont aucun effet (même si je mets le cell.contentView.backgroundColor-clearColor):

cell.backgroundView.backgroundColor = [UIColor redColor]; 

cell.backgroundColor = [UIColor redColor]; 

Je mis toute la mise en page/police/stuff de fond dans IB. Une idée de pourquoi cela ne fonctionne pas dans ce cas? Pourquoi ai-je besoin de modifier le backgroundColor et non le backgroundView?

Cela semble être un problème commun. Quelqu'un pourrait-il me diriger dans la bonne direction pour (enfin) comprendre comment les couleurs d'arrière-plan sont traitées dans une cellule de vue de table.

Répondre

1

Il existe une solution plus simple: lorsque vous créez un UITableViewCell dans Interface Builder, il suffit de faire glisser et déposer un UIView supplémentaire pour qu'il couvre l'intégralité de UITableViewCell que vous créez dans IB. Placez vos éléments d'interface utilisateur supplémentaires au-dessus de ce UIView supplémentaire. Vous pouvez définir ce supplément UIView à l'arrière-plan que vous aimez.

Il y a assez peu de réponses sur StackOverflow qui vous suggère de changer la couleur de fond de votre UITableViewCell en utilisant une ligne de code comme celui-ci:

cell.contentView.backgroundColor = [UIColor redColor]; 

Si vous ajoutez une ombre portée à votre cellule en ajustant la taille de l'image de contentView légèrement, vous pouvez constater que cette ligne va aussi bien changer la couleur de fond de votre cellule et la couleur de votre zone d'ombre portée.

51

Pour modifier la couleur d'arrière-plan de la cellule, vous devez le faire dans la méthode willDisplayCell: forRowAtIndexPath:. Ceci est mentionné dans le UITableViewCell documentation près du sommet dans une note en boîte. Vous devez donc:

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

Le contentView est juste la sous-vue recommandé de mettre des contrôles personnalisés dans de telle sorte que la cellule se layed correctement lors de l'édition de la table est en cours.

+2

thx pour l'info. mais encore, pourquoi le réglage dans le IB ne fonctionne pas? Je place juste le label.text dans le contrôleur. et la définition de l'arrière-plan IB fonctionne dans tous les nib (UIView), mais pas avec UITableViewCell. – klemens

+0

Impossible de confirmer pour l'instant, mais UITableViewCell semble être un cas particulier.Dans les docs Apple pour willDisplayCell et les cellules personnalisées, il mentionne d'utiliser cette méthode qui est appelée "après que la vue de la table soit faite en réglant les couleurs en fonction de la sélection, etc". Cela peut fonctionner si vous créez une sous-classe personnalisée de UITableViewCell dans le code, mais que vous ne pouvez pas le vérifier maintenant. – Anna

+0

ok, donc je l'ai juste mis en place dans le code. Merci pour votre aide la plus excellente. – klemens

Questions connexes