Question

J'ai un UITableView que je suis le chargement via JSON. Donc, ma logique va comme ceci:

  1. Fetch JSON (NSOperation, rappel au thread principal)
  2. En rappel, analyser le JSON, et insérer de nouvelles données dans mon tableau de tableau source de données.
  3. 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:

  1. Commencez par [self.theTableView beginUpdates];
  2. 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.
  3. 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];

  4. Fin avec endUpdates en dehors de la boucle.

Woot.

Était-ce utile?

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]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top