J'ai un UITableView
avec des cellules personnalisées. J'ai les classes MyTableViewCell : UITableViewCell
et MyTableViewCellContentView : UIView
Ce que je fais est essentiellement ce qui est fait dans le AdvancedTableViewCells demo app from Apple avec un léger changement, sur certaines lignes, je veux utiliser un fond clearColor pour montrer l'arrière-plan de la table derrière le texte peint.Cocoa-Touch: Comment: personnalisé UITableViewCell avec UIColor fond clearColor
Ainsi, dans MyTableView
's cellForRowAtIndexPath
que je fais:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"MyCell";
MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.someValue = indexPath.section;
[cell finishedSetup];
return cell;
}
Et dans mes MyTableViewCell
' s finishedSetup
:
cellContentView = [[MyTableViewCellContentView alloc] initWithFrame:CGRectMake(0, 0, 320, 80) cell:self];
cellContentView.autoresizingMask = UIViewAutoresizingNone;
cellContentView.contentMode = UIViewContentModeRedraw;
[self.contentView addSubview:cellContentView];
Et dans MyTableViewCellContentView
je mets en œuvre la méthode drawRect
. Et prévoyez de ne pas utiliser de sous-vues, mais dessinez mon contenu personnalisé, tout comme l'exemple d'Apple dans le CompositeSubviewBasedApplication
. Le problème est que pour quelques sections je veux utiliser un clearColor
backgroundColor
. Cela fonctionne, jusqu'à ce qu'une cellule avec un clearColor
backgroundColor
soit réutilisée pour dessiner une cellule clearColor
, à ce moment l'arrière-plan n'est pas effacé et aura toujours l'ancienne couleur.
Comment redessiner l'arrière-plan?
Modifier: j'ai oublié de mentionner, je définir la couleur de fond dans MyTableViewCellContentView
de INIT après avoir appelé init super. Réglage via:
self.backgroundColor = [UIColor clearColor];
J'ai vérifié que cela, en fait, ne s'appelle et est appelé comme prévu avec clearColor ou redColor.
J'ai également essayé de définir la couleur de fond de la cellule de la table, cela n'a pas aidé.
Edit # 2: Voici ma méthode de drawRect:
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
static int i = 0;
[[NSString stringWithFormat:@"Cell %d", ++i] drawAtPoint:CGPointMake(3, 3) withFont:[UIFont boldSystemFontOfSize:16]];
}
Aucun des codes que vous avez inclus ne permet de définir les valeurs backgroundColor n'importe où ... où cela se produit-il? –
@Sixten Otto: Je le fais dans l'init de MyTableViewCellContentView. Je le fais après avoir appelé super's init. J'ai également essayé de définir backgroundColor de l'ancêtre UITableViewCell, cela n'a pas aidé. – Prody