JSON を介した UITableView の更新、行の挿入のアニメーション化
質問
JSON 経由でロードしている UITableView があります。したがって、私のロジックは次のようになります。
- JSON を取得します (NSOperation、メインスレッドへのコールバック)
- コールバックで、json を解析し、テーブルのデータ ソース配列に新しいデータを挿入します。
- TableView で reloadData を呼び出して、新しいデータを表示します。
私の質問は次のとおりです。テーブル内の新しい行の到着をアニメーション化するにはどうすればよいですか?今のところ、それらをすべて一度に存在させているだけですが、私がやりたいのは、それらをアニメーション化して所定の位置に配置することです。そのほうがずっとクールに見えるからです。
私が望むのは次のものを使用することだと思います:
[self.theTableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationRight];
しかし、そのため、更新のサイズがデータ ソースのサイズと異なるというランタイムの苦情が発生します。
そのメソッドの使用方法について何かを見逃しているのでしょうか?このパターンを介して新しい行を TableView にアニメーション化している例を知っている人はいますか?
アップデート:基本的に、私はベンの指導のおかげで、次のアプローチでこれを解決しました。
- [self.theTableView beginUpdates] で開始します。
- JSON 内のエントリをループするときは、配列の先頭にエントリを挿入し、ループを通過するたびにインデックスをインクリメントします。
次のように、ループを通過するたびに insertRowsAtIndexPath を呼び出します。
NSIndexPath *インデックスパス;IndexPath = [NSIndexPath IndexPathForRow:[self.theChatEntries IndexOfObject:message] inSection:0];[self.theTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:NO];
ループの外で endUpdates で終了します。
うーん。
解決
あなたは正しい軌道に乗っています。あなたは-insertRowsAtIndexPathsにあなたの呼び出しをラップする必要があります。withRowAnimation:[self.theTableView beginUpdates]とし、[self.theTableView endUpdates]
。