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?
Je sous-classe ma cellule, et le prepareForReuse fonctionne bien. Je pense que le problème peut être à la méthode -clearButtons. – AechoLiu