J'ai une vue avec un curseur personnalisé. Nous utilisons une sous-classe de TableViewController qui génère des instances de UITableViewCell. À l'intérieur de chaque tableViewCell, nous ajoutons notre curseur personnalisé (une vue d'interface utilisateur) en tant que sous-vue. Ici, nous avons une vue qui sert de bouton de contrôle du curseur. C'est juste une sous-classe de UIView avec un reconnaisseur de gestes. La méthode drawRect pour la classe de boutons de contrôle prend un UIImage et exécute drawAtPoint. Cela fonctionne très bien! Pour résumer, nous avons:Pourquoi drawAtPoint crée-t-il des images en double dans la vision du contenu de mon tablecell?
UITableView -> UITableViewCell -> UITableViewCell.contentView -> SliderView -> SliderKnob -> UIImage
Le problème se produit lorsque nous faisons défiler une cellule de table de la vue de la table. L'UIImage pour le bouton persiste. Nous finissons par obtenir une copie de l'image restante chaque fois que la cellule est retirée. J'ai configuré quelques instructions NSLog et confirmé que drawRect est appelé dans chacune des sous-vues. Y at-il quelque chose que je dois faire pour rafraîchir le rendu de la cellule? J'ai essayé d'utiliser setNeedsDisplay sur les sous-vues de UITableViewCell mais je n'ai pas réussi à empêcher la duplication de UIImage.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"SliderView";
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
SliderView *slider = [[[SliderView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 130)] autorelease];
// Configure the data for the cell.
NSDictionary *dataItem = [data objectAtIndex:indexPath.row];
slider.dimensionName = [dataItem objectForKey:@"Name"];
slider.upperExtreme = [dataItem objectForKey:@"Upper Extreme"];
slider.lowerExtreme = [dataItem objectForKey:@"Lower Extreme"];
slider.score = [[dataItem objectForKey:@"Score"] intValue];
cell.selectionStyle = UITableViewCellEditingStyleNone;
cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"track_grainy.png"]];
[cell.contentView addSubview:slider];
return cell;
}
Pouvez-vous s'il vous plaît poster votre méthode 'cellForRowAtIndexPath' quand vous avez un moment? – iwasrobbed
Bien sûr! Je viens de l'ajouter pour vous. –