UITableView reloadSection导致为所有行调用cellForRowAtIndexPath

时间:2012-04-24 15:33:12

标签: ios uitableview

我有一个带有UITableViewController的应用,最初只有一个部分包含一行(其中包含“正在加载...”)。它从互联网上获取一些数据,此时它会进行以下调用:

[tableView reloadSections:[NSIndexPath indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];

这是必要的,因为在获取数据之后,现在有很多行,而不仅仅是最初的1(所以要求表视图查看可见单元格列表是不可能的,因为它只返回1岁1)

麻烦的是,它随后为每一行调用cellForRowAtIndexPath委托方法,而不仅仅是可见的。我通过对方法进行一些记录来验证。如果我将行切换为简单的[tableView reloadData],那么它只会在前几行调用cellForRowAtIndexPath,直到您滚动的位置和其他行进入视图。这发生在我的iOS4 iPod Touch以及iOS5模拟器中。

我有大约300行,这使得加载非常慢,并且通常会在我的iPod Touch上崩溃。

我不仅仅使用reloadData的原因是我想要添加新的动画,而reloadData只是让它们突然出现。

2 个答案:

答案 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数组项的索引...