动画UITableView重新加载会导致每个单元格立即加载

时间:2012-09-29 22:52:10

标签: iphone ios uitableview

我有一个包含100个单元格的表视图。起初,它是空的。然后,我打电话给:

[_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationLeft];

由于表视图中没有任何内容,我需要创建几个单元格。但是,我期待表视图要求10(以适应屏幕大小)单元格...而不是100!

当我只是在没有任何动画的情况下重新加载表视图时,就不会发生这种情况:

[_tableView reloadData];

这个问题使得表重新加载非常慢:有没有办法让它只要求10个单元?


修改

也许我不够清楚:起初,表格中有没有条目然后,我在我的数据源中添加 100个条目,并要求表重新加载:重新加载之前没有可见的单元格,因此reloadRowsAtIndexPaths解决方案获胜不行。

4 个答案:

答案 0 :(得分:2)

听起来你在表中插入新行,而不是重新加载,所以为什么不使用:

[_tableView insertRowsAtIndexPaths:... withRowAnimation:...];

您可能需要先插入该部分:

[_tableView insertSections:... withRowAnimation:..];

http://developer.apple.com/library/ios/ipad/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html

答案 1 :(得分:0)

如果您只想重新加载,请说10个单元格,以下代码将起作用。

        int cellsToReload = 10;

        NSMutableArray *indexPaths = [NSMutableArray arrayWithCapacity:cellsToReload];
        for(int x = 0; x < cellsToReload; x++) {

            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:x inSection:0];
            [indexPaths addObject:indexPath];
        }

        [self.theTableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];

在上面的代码中,当您重新加载所有tableview时,您正在重新加载整个部分而不仅仅是几行。我猜你的tableview只有一个部分。

答案 2 :(得分:0)

NSArray *paths = [_tableView indexPathsForVisibleRows];
[_tableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationLeft];
将完全按照您的需要进行操作 - 仅重新加载可见的原始数据,既不多也不少。

答案 3 :(得分:0)

我发现此问题仅在iOS 5.1及更低版本上发生。无需提交错误,因为它已在iOS 6中得到纠正。无论如何,谢谢你的答案!