我有一个带有UITableViewController
的应用,最初只有一个部分包含一行(其中包含“正在加载...”)。它从互联网上获取一些数据,此时它会进行以下调用:
[tableView reloadSections:[NSIndexPath indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
这是必要的,因为在获取数据之后,现在有很多行,而不仅仅是最初的1(所以要求表视图查看可见单元格列表是不可能的,因为它只返回1岁1)
麻烦的是,它随后为每一行调用cellForRowAtIndexPath
委托方法,而不仅仅是可见的。我通过对方法进行一些记录来验证。如果我将行切换为简单的[tableView reloadData]
,那么它只会在前几行调用cellForRowAtIndexPath
,直到您滚动的位置和其他行进入视图。这发生在我的iOS4 iPod Touch以及iOS5模拟器中。
我有大约300行,这使得加载非常慢,并且通常会在我的iPod Touch上崩溃。
我不仅仅使用reloadData
的原因是我想要添加新的动画,而reloadData
只是让它们突然出现。
答案 0 :(得分:1)
你可以这样做:
[tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows]
withRowAnimation:UITableViewRowAnimationNone];
答案 1 :(得分:0)
这就是我用来向表中添加行的内容:
NSMutableArray *indexPathsToInsert = [[NSMutableArray alloc] init];
for (NSInteger i = previousTableDataCount; i < [tableData count]; i++) {
[indexPathsToInsert addObject:[NSIndexPath indexPathForRow:i inSection:0]];
}
// Apply the updates.
[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:indexPathsToInsert withRowAnimation:UITableViewRowAnimationNone];
[tableView endUpdates];
它不会重新加载所有数据,它只是在现有tableView的底部插入新行。 tableData数组是表的数据源数组,previousTableDataCount是在从互联网插入新数据之前具有tableData数组项的索引...