30 votes

Impossible de définir la couleur d'arrière-plan de UITableViewCell dans IB

J'ai créé un ensemble de cellules que je réutilise dans une vue tableau. Toutes ces cellules ont simplement des UILabel à l'intérieur et quelques UIImageView (rien ne couvre la cellule complète).

Le réglage de la couleur de l'arrière-plan dans IB n'a aucun effet (toujours blanc ou transparent, je ne saurais dire lequel des deux). Mais si j'appuie sur Command-R (simuler l'interface), la cellule a la couleur de fond correcte dans le simulateur.

J'ai essayé de le mettre dans tableView:cellForRowAtIndexPath: mais ça ne fonctionne pas non plus comme je l'aurais pensé.

Cela fait l'affaire :

cell.contentView.backgroundColor = [UIColor redColor];

mais ceux-ci n'ont aucun effet (même si je règle le paramètre cell.contentView.backgroundColor a clearColor ) :

cell.backgroundView.backgroundColor = [UIColor redColor];

cell.backgroundColor = [UIColor redColor];

Je règle tous les paramètres de mise en page, de police et d'arrière-plan dans IB. Savez-vous pourquoi cela ne fonctionne pas dans ce cas ?

Pourquoi dois-je modifier le contentView 's backgroundColor et non le backgroundView 's ?

Il semble que ce soit un problème courant. Quelqu'un pourrait-il m'indiquer la bonne direction pour (enfin) comprendre comment les couleurs d'arrière-plan sont gérées dans une cellule de tableau ?

53voto

Anna Points 44332

Pour modifier la couleur d'arrière-plan de la cellule, vous devez le faire dans la section willDisplayCell:forRowAtIndexPath: méthode. Ceci est mentionné dans le Documentation sur UITableViewCell près du bas de l'aperçu. Vous en avez donc besoin :

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

La ContentView est simplement la sous-vue recommandée pour placer des contrôles personnalisés afin que la cellule soit disposée correctement lors de l'édition du tableau.

2 votes

Merci pour l'information. Mais pourquoi le réglage dans l'IB ne fonctionne-t-il pas ? J'ai réglé seulement le label.text dans le contrôleur. Et le réglage de l'arrière-plan de l'IB fonctionne dans toutes les nibs (UIView), mais pas avec UITableViewCell.

0 votes

Je ne suis pas en mesure de le confirmer pour l'instant, mais UITableViewCell semble être un cas particulier. Dans la documentation Apple sur willDisplayCell et les cellules personnalisées, il est mentionné d'utiliser cette méthode qui est appelée "après que la vue de la table a fini de définir 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 je n'ai pas pu le vérifier pour le moment.

0 votes

Ok, donc je viens de le mettre en place dans le code. merci pour votre excellente aide.

1voto

drekka Points 10020

J'ai trouvé cet article de Cocoa With Love vraiment utile, car il examine une vue de table entièrement personnalisée et comment la réaliser.

1voto

russes Points 151

Il y a une solution plus simple : Lorsque vous créez un UITableViewCell dans le Générateur d'interface, il suffit de faire glisser et de déposer une autre UIView de façon à ce qu'il couvre la totalité UITableViewCell que vous créez au sein de l'IB. Placez vos éléments d'interface utilisateur supplémentaires au-dessus de cet élément supplémentaire. UIView . Vous pouvez définir ce supplément UIView sur le fond que vous voulez.

De nombreuses réponses sur StackOverflow suggèrent de modifier la couleur d'arrière-plan de votre carte de crédit. UITableViewCell en utilisant une ligne de code comme celle-ci :

cell.contentView.backgroundColor = [UIColor redColor];

Si vous ajoutez une ombre portée à votre cellule en ajustant l'option contentView Si vous modifiez légèrement la taille du cadre de votre cellule, vous constaterez peut-être que cette ligne modifiera à la fois la couleur d'arrière-plan de votre cellule et la couleur de la zone d'ombre portée.

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