我想使用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];
}
但是这种方式在大数据上看起来似乎很慢,那么如何使用动画快速加载tableviews呢?
答案 0 :(得分:1)
您应该查看beginUpdates
和endUpdates
。在这两个命令中,您可以更新/删除/插入行并为其设置动画。它比使用reloadData
更有效率。
有关此主题的更多信息,请访问:http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html
快速摘录:
- (无效)beginUpdates
如果您想要后续插入,删除和,请调用此方法 选择操作(例如,cellForRowAtIndexPath:和 indexPathsForVisibleRows)同时进行动画处理。这一组 方法必须以调用endUpdates结束。这些方法 对可以嵌套。如果您不进行插入,删除和 选择调用此块内部,表属性如行计数 可能会变得无效。你不应该在组内调用reloadData; 如果您在组内调用此方法,则需要执行任何操作 自己制作动画。
答案 1 :(得分: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];