1

我想将 UITableViewRowAnimation 与 :reloadData 一起使用。

在我使用该示例进行表加载之前(我在一些 ios 开发指南中发现):

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

你应该看看beginUpdatesand endUpdates。在这两个命令中,您可以更新/删除/插入行并为您设置动画。它也比使用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 是对的,但在您的情况下,您可以在数组中累积所有索引,然后使用一个插入命令更新表:

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 回答