1

:reloadData で UITableViewRowAnimation を使用したい。

テーブルの読み込みにその例を使用する前に (いくつかの ios dev ガイドで見つけました):

for (NSDictionary *entry in [dl reverseObjectEnumerator]) {
        int insertIdx = 0;

        [_allEntries insertObject:entry atIndex:insertIdx];
        [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:insertIdx inSection:0]]
                              withRowAnimation:UITableViewRowAnimationRight];

    }   

しかし、その方法はビッグデータでは非常に遅いようです。では、アニメーションでテーブルビューを高速にロードするにはどうすればよいでしょうか?

4

2 に答える 2

1

beginUpdatesとをご覧くださいendUpdates。これら 2 つのコマンド内で、行を更新/削除/挿入し、アニメーション化することができます。また、を使用するよりもはるかに効率的ですreloadData

このトピックの詳細: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html

簡単な抜粋:

  • (void)beginUpdates

後続の挿入、削除、および選択操作 (cellForRowAtIndexPath: および indexPathsForVisibleRows など) を同時にアニメーション化する場合は、このメソッドを呼び出します。このメソッドのグループは、endUpdates の呼び出しで終了する必要があります。これらのメソッドのペアはネストできます。このブロック内で挿入、削除、および選択の呼び出しを行わないと、行数などのテーブル属性が無効になる可能性があります。グループ内で reloadData を呼び出さないでください。グループ内でこのメソッドを呼び出す場合は、自分でアニメーションを実行する必要があります。

于 2012-08-17T18:31:12.833 に答える
0

Wasabii は正しいですが、あなたの場合、すべてのインデックスを配列に蓄積してから、1 つの挿入コマンドでテーブルを更新できます。

NSMutableArray *indexes = [NSMutableArray arrayWithCapacity:5];

for (NSDictionary *entry in [dl reverseObjectEnumerator])
{
    int insertIdx = 0;

    [_allEntries insertObject:entry atIndex:insertIdx];
    [indexes addObject:[NSIndexPath indexPathForRow:insertIdx inSection:0]];
}

// insert rows into table
[self.tableView insertRowsAtIndexPaths:indexes withRowAnimation:UITableViewRowAnimationRight];
于 2012-08-17T19:15:47.520 に答える