La méthode acceptée semble sale, elle fait juste un tas de nouvelles cellules qui sont stockées avec les mauvaises. Voici quelques solutions en fonction de votre situation:
1. D'abord, pour la situation décrite dans la question, vous ne devriez pas vider vos cellules et créer de nouvelles vues sur chaque cycle. Vous devez marquer votre point de vue, puis le récupérer quand de la cellule lorsque vous obtenez une cellule de réutilisation:
- (UITableViewCell*) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath*) indexPath {
UITableViewCell *cell = [tableView dequeueResuableCellWithIdentifier:SOME_ID];
if(!cell) {
cell = [[UITableViewCell alloc] init];
UIView *myView = [[UIView alloc] init];
cell.backgroundView = myView;
[myView setTag:5]; //<------
}
UIView *myView = [cell viewWithTag:5]; //<------
if ((indexPath.row % 2) == 0)
myView.backgroundColor = [UIColor greenColor];
else
myView.backgroundColor = [UIColor whiteColor];
return cell;
}
//then just reload the tableview.
2. ... ou mieux encore, pourquoi ne pas simplement utiliser la backgrouncolor cellulaire et mise à jour sans créer une vue.
3. Un moyen sûr de vraiment effacer les vieilles cellules mises en cache pour simplement recréer l'objet UITableView. Dans la plupart des cas, vous n'avez pas besoin de détruire ces cellules, il suffit de garder une trace de vos éléments et de les mettre à jour après avoir récupéré la cellule réutilisable. Vous pouvez marquer tous vos éléments, les conserver la hiérarchie de vue ... Je suis sûr qu'il y a beaucoup d'autres façons.
5. Heres une doublure pour purger directement toutes les cellules, mais pas la meilleure pratique de jouer avec les objets internes de ce genre comme ils pourraient changer dans les futures versions:
[(NSMutableDictionary*)[tableview valueForKey:@"_reusableTableCells" ] removeAllObjects];
a fait mon aide de réponse? –