3

JSON経由でロードしているUITableViewがあります。したがって、私のロジックは次のようになります。

  1. JSON を取得します (NSOperation、メイン スレッドへのコールバック)
  2. コールバックで、json を解析し、テーブルのデータ ソース配列に新しいデータを挿入します。
  3. TableView で reloadData を呼び出して、新しいデータを表示します。

私の質問は次のとおりです。テーブルに新しい行が到着したことをアニメーション化するにはどうすればよいですか? 今、私はそれらすべてを一度に出現させています。私がやりたいのは、それらを所定の位置にアニメーション化することです。

私が使いたいのは次のことだと思います:

 [self.theTableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationRight];

しかし、これにより、更新のサイズがデータ ソースのサイズと異なるというランタイムの不満が生じます。

そのメソッドの使用方法について何か不足していますか? このパターンを介して誰かが新しい行を TableView にアニメーション化する例を知っている人はいますか?

更新: 基本的に、Ben のガイダンスのおかげで、次のアプローチでこれを解決しました。

  1. [self.theTableView beginUpdates] から始めます。
  2. JSON のエントリをループするときは、配列の先頭に挿入し、ループのたびにインデックスをインクリメントします。
  3. 次のように、ループのたびに insertRowsAtIndexPath を呼び出します。

    NSIndexPath *indexPath; indexPath = [NSIndexPath indexPathForRow:[self.theChatEntries indexOfObject:message] inSection:0]; [self.theTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:NO];

  4. ループ外の endUpdates で終了します。

うーん。

4

1 に答える 1

0

あなたは正しい道を進んでいます。-insertRowsAtIndexPaths:withRowAnimation: への呼び出しを [self.theTableView beginUpdates] と [self.theTableView endUpdates] でラップする必要があります。

于 2010-02-08T20:16:22.743 に答える