2010-10-19 5 views
0

J'ai créé un UITableViewCell personnalisé où j'ajoute un tas de boutons chargés dynamiquement à son contentView. Ceux-ci s'affichent correctement.UITableViewCell avec prepareForReuse ne fonctionne pas

Lorsque les données qui contrôle ce que les boutons sont le changement chargé et je l'appelle reloadData je vois que prepareForReuse est appelé:

- (void) prepareForReuse { 
    NSLog(@"prep for reuse"); 
    [self clearButtons]; 
} 

- (void) clearButtons { 
    NSLog(@"clearButtons called"); 
    self.buttons; 
    for (UIView* v in buttons) { 
     NSLog(@"clearing a button."); 
     [v removeFromSuperview]; 
     [v dealloc]; 
    } 
    buttons = [[NSMutableArray alloc] init]; 
} 

Les boutons ne sont pas supprimés de la superview cependant, le « Effacement d'un bouton. » le message n'est jamais connecté.

J'ai ensuite ajouté un appel explicite à clearButtons dans tableView:cellForRowAtIndexPath:

CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
} 

[cell clearButtons]; 

Et cette fois je peux voir que « Effacement d'un bouton. » est enregistré et tout s'affiche correctement.

Ce qui donne? Pourquoi les boutons ne sont-ils pas supprimés lorsqu'ils sont appelés depuis prepareForReuse?

+0

Je sous-classe ma cellule, et le prepareForReuse fonctionne bien. Je pense que le problème peut être à la méthode -clearButtons. – AechoLiu

Répondre

1

Il pourrait ne pas lié, mais il y a peu de choses que vous devez résoudre dans createButtons:

  1. Utilisation [v release] au lieu de [v dealloc]
  2. de sortie buttons et avant nouvelle initialisation.

Je demanderais aussi que si vous supprimez tout sauf NSLog, cela fonctionne-t-il?

4

Vous devez spécifier un identifiant de réutilisation lorsque la cellule est créée ou UITableView n'appelera pas votre méthode 'prepareForReuse'.

Par documentation, vous devez également appeler [super prepareForReuse];

Questions connexes