UITableView mise à jour via JSON, animer insertion Row
Question
J'ai un UITableView que je suis le chargement via JSON. Donc, ma logique va comme ceci:
- Fetch JSON (NSOperation, rappel au thread principal)
- En rappel, analyser le JSON, et insérer de nouvelles données dans mon tableau de tableau source de données.
- Appel reloadData sur le TableView pour montrer les nouvelles données.
Ma question est: Comment puis-je ANIMER l'arrivée de nouvelles lignes dans le tableau? En ce moment, je viens tous popping l'existence à la fois, et ce que je veux faire est de les animer en place, parce que l'air beaucoup plus cool.
Je pense que ce que je veux est d'utiliser:
[self.theTableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationRight];
Mais cela me donne des plaintes au sujet de la taille d'exécution de la mise à jour étant différente de la taille de la source de données.
Est-ce que je manque quelque chose sur la façon dont cette méthode doit être utilisée? Quelqu'un sait-il d'un exemple où quelqu'un anime de nouvelles lignes dans une TableView via ce modèle?
Mise à jour: En fait, je l'ai résolu ceci grâce à la direction de Ben, l'approche suivante:
- Commencez par [self.theTableView beginUpdates];
- Quand je boucle sur mes entrées dans le JSON, insérez-les au début de mon tableau, incrémenter leur index à chaque fois dans la boucle.
-
Appel insertRowsAtIndexPath chaque fois à travers la boucle, comme ceci:
* NSIndexPath indexPath; indexPath = [NSIndexPath indexPathForRow: [self.theChatEntries IndexOfObject: message] lasection: 0]; [Self.theTableView insertRowsAtIndexPaths: [NSArray arrayWithObject: indexPath] withRowAnimation: NO];
-
Fin avec endUpdates en dehors de la boucle.
Woot.
La solution
Vous êtes sur la bonne voie; vous avez besoin pour envelopper vos appels -insertRowsAtIndexPaths: withRowAnimation:. avec un [self.theTableView beginUpdates] et [self.theTableView endUpdates]