2011-04-07 6 views
3

Voici donc ma situation:Mise à jour de UITableViewCell sans recharger

J'ai un UITableView où chaque cellule a des boutons.
Dans cellForRowAtIndexPath, je définis le chemin d'index de la ligne, donc lorsque je clique sur un bouton, je sais quelle ligne a été cliquée.
L'un des boutons est un bouton de suppression et une fois pressé, je supprime les données de sauvegarde et supprime la ligne de la table. Le problème que j'ai est qu'après avoir supprimé une ligne les indexPath des autres lignes sont incorrects car les autres lignes n'ont pas été redessinées. La seule façon que je peux trouver pour redessiner la table est d'appeler recharger mais cela désorganise l'animation.
Je pense que ce genre de problème a déjà été résolu. Est-ce que quelqu'un a des suggestions sur la façon de contourner cela? Je suis d'accord pour changer la façon dont j'ai conçu mes boutons pour fonctionner s'il y a une meilleure façon.

+0

Avez-vous déjà trouver une solution de contournement pour cela? reloadRows et reloadSections sont devenus un horrible problème pour moi à cause des animations/flashes indésirables quand il n'y en a pas. – SAHM

Répondre

1

Il est préférable de ne pas stocker les indexPath avec les boutons. Dans le gestionnaire d'action de bouton (qui est soit une méthode dans votre sous-classe de cellule ou dans votre viewController) vous pouvez identifier la cellule, puis déterminer l'indexPath en utilisant -indexPathForCell:.

+0

Cela fait longtemps que je n'ai pas écrit cette question, mais vous avez raison et c'est ainsi que je gère maintenant les choses. – skorulis

9

pense que vous devez utiliser ...

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation 

Apple reference!

+0

J'ai essayé d'utiliser la version reloadSections (car la plupart de la section est incorrecte) mais les animations sur ce travail sont terribles. La table entière semble clignoter et je peux voir le blanc qui se trouve derrière la table. – skorulis

+0

Peut-être que vous avez besoin de recharger les cellules autour d'elle aussi? Quelles sont les données derrière cela comme si vous utilisez CoreData, il gère beaucoup de cela pour vous. –

2
appel

la méthode: - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

+0

J'appelle cette méthode. Cela effectue la suppression correctement mais ne redessine pas les autres cellules afin que les chemins d'index soient incorrects. – skorulis

2

Vous devriez être en mesure de redessiner la tableview sans rechargement complet en commençant et se terminant une mise à jour comme celui-ci:

[tableView beginUpdates]; 
[tableView endUpdates]; 
Questions connexes