UITableView ReloadData不使用出队的单元格

时间:2013-09-06 14:05:29

标签: iphone ios objective-c uitableview

我正在开发iOS RSS阅读器应用程序。 我的应用程序使用自定义节标题实现UITableView:

    UINib *sectionHeaderNib = [UINib nibWithNibName:@"HeadlineView" bundle:nil];
[self.newsTable registerNib:sectionHeaderNib forHeaderFooterViewReuseIdentifier:SectionHeaderViewIdentifier];

每个节标题用于显示文章标题。 我可以选择在“已经看过”的文章和新文章之间进行更改。 每次我在选项之间切换时,表视图数据数组都会改变,所以我需要调用UITableView ReloadData:

[self.newsTable performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];

当我调用此方法时,加载需要的时间超过1秒(这似乎卡住了)因为它重新加载了所有节标题而不是使用出列节标题。 当我只是滚动表格视图时,一切正常,出列工作正常。

每次初始化节标题时,我都会设置3个手势识别器,这需要很长时间。但是如果节标题出列,则手势识别器已经设置好,因此它很快。

这是出列代码:

NowsHeadlineHeaderView *sectionHeaderView = [self.newsTable dequeueReusableHeaderFooterViewWithIdentifier:SectionHeaderViewIdentifier];

我没有在单元格/部分加载中执行任何其他耗时的任务。

为什么tableview在使用reloadData时反复初始化节头,我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

强行调用reloadData在出列的单元格/标题/等上清除平板。来自the documentation

  

调用此方法(reloadData)重新加载用于的所有数据   构造表,包括单元格,节头和页脚,   索引数组等。为了提高效率,表格视图会重新显示   只有那些可见的行。它会调整表格的偏移量   因重新加载而缩小。

如果你正在做的是添加或减少细胞或部分,请尝试使用insertRowsAtIndexPaths:withRowAnimation:deleteRowsAtIndexPaths:withRowAnimation:

我还怀疑你的NowsHeadlineHeaderView设置效率低下,你可能想看一下。