Je veux obtenir l'effet suivant : une cellule de la vue tableau aura un fond bleu, la suivante sera blanche, la suivante sera à nouveau bleue, puis blanche et ainsi de suite... Pourriez-vous me dire comment faire ?
Merci.
Je veux obtenir l'effet suivant : une cellule de la vue tableau aura un fond bleu, la suivante sera blanche, la suivante sera à nouveau bleue, puis blanche et ainsi de suite... Pourriez-vous me dire comment faire ?
Merci.
Ajoutez cette méthode au délégué de votre vue de table :
#pragma mark UITableViewDelegate
- (void)tableView: (UITableView*)tableView
willDisplayCell: (UITableViewCell*)cell
forRowAtIndexPath: (NSIndexPath*)indexPath
{
cell.backgroundColor = indexPath.row % 2
? [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0]
: [UIColor whiteColor];
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];
}
+1 Cela a fonctionné et c'est la seule façon de faire tenir le paramètre textLabel.backgroundColor. Le réglage dans tableView:cellForRowAtIndexPath : n'a pas fonctionné pour moi (OS 3.2) mais cette méthode a fonctionné.
Il existe une ancienne vidéo de la WWDC datant de 2009 ou 2010 qui traite de ce sujet. La vue tableau ajuste l'arrière-plan pour gérer les états de sélection des cellules, c'est pourquoi le seul endroit où vous pouvez le modifier de manière fiable est la méthode willDisplayCell.
Est-ce que quelqu'un comprend pourquoi le réglage dans cellforrowatindex ne fonctionne pas correctement ? J'ai essayé avec cette méthode, mais %2 ne le fait pas correctement pour une ligne sur deux. Et lorsque vous faites défiler vers le haut et vers le bas plusieurs fois, l'arrière-plan de chaque cellule change. willDisplayCell fonctionne cependant, mais je me demande juste pourquoi cela ne fonctionne pas pour cellforrow.
Si vous souhaitez définir la couleur de la cellule en fonction d'un état de l'objet de données de la cellule, il s'agit d'une autre approche :
Si vous ajoutez cette méthode à votre délégué de vue de table :
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = cell.contentView.backgroundColor;
}
Ensuite, dans votre méthode cellForRowAtIndexPath vous pouvez faire :
if (myCellDataObject.hasSomeStateThatMeansItShouldShowAsBlue) {
cell.contentView.backgroundColor = [UIColor blueColor];
}
Cela évite de devoir récupérer à nouveau vos objets de données dans la méthode willDisplayCell.
J'ai constaté que cette approche permet également d'éviter de devoir modifier l'arrière-plan des étiquettes de texte - le tableView semble les ajuster automatiquement pour qu'elles correspondent à la couleur d'arrière-plan de la cellule. Pour mon cas d'utilisation, c'est la solution la plus simple parmi les réponses présentées ici.
El cell.contentView.backgroundColor = [UIColor colorWithRed...]
de la réponse de lostInTransit fonctionne, tant que vous n'utilisez pas l'étiquette intégrée d'une UITableViewCell.
J'ai découvert que si vous utilisez l'étiquette intégrée, par exemple en définissant cell.text
vous vous retrouvez avec un bloc blanc opaque sous l'étiquette et seules les deux extrémités de la cellule affichent la couleur souhaitée.
Je n'ai trouvé aucun moyen de modifier l'étiquette intégrée afin qu'elle soit non opaque (vous pouvez y accéder via UILabel* cellLabel = [cell.contentView.subviews objectAtIndex:0]
).
J'ai résolu le problème en ajoutant ma propre personnalisation UILabel
. Comme ça :
UILabel* cellLabel = [[[UILabel alloc] initWithFrame:cell.frame] autorelease];
cellLabel.text = @"Test with non-opaque label";
cellLabel.backgroundColor = [UIColor clearColor];
cellLabel.opaque = NO;
[cell.contentView addSubview:cellLabel];
cell.contentView.backgroundColor = [UIColor darkGrayColor];
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.
0 votes
Duplicata possible : stackoverflow.com/questions/281515/
1 votes
@willcodejavaforfood ce commentaire est très peu utile et n'est pas pertinent pour la question de l'OP.