我正在开发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时反复初始化节头,我该如何解决这个问题呢?
答案 0 :(得分:0)
强行调用reloadData
在出列的单元格/标题/等上清除平板。来自the documentation:
调用此方法(
reloadData
)重新加载用于的所有数据 构造表,包括单元格,节头和页脚, 索引数组等。为了提高效率,表格视图会重新显示 只有那些可见的行。它会调整表格的偏移量 因重新加载而缩小。
如果你正在做的是添加或减少细胞或部分,请尝试使用insertRowsAtIndexPaths:withRowAnimation:
和deleteRowsAtIndexPaths:withRowAnimation:
。
我还怀疑你的NowsHeadlineHeaderView
设置效率低下,你可能想看一下。