【问题标题】:UITableView ReloadData not using dequeued cellsUITableView ReloadData 不使用出列单元格
【发布时间】:2013-09-06 22:56:59
【问题描述】:

我正在开发一个 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];

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

为什么当我使用 reloadData 时 tableview 会一遍又一遍地初始化节标题,我该如何解决这个问题,这样它会更快

【问题讨论】:

    标签: iphone ios objective-c uitableview


    【解决方案1】:

    强行调用reloadData 会清除出列单元格/标题/等上的空白。来自the documentation

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

    如果您正在添加或减去单元格或部分,请尝试改用 insertRowsAtIndexPaths:withRowAnimation:deleteRowsAtIndexPaths:withRowAnimation:

    我还怀疑您的 NowsHeadlineHeaderView 设置效率低下,您可能需要调查一下。

    【讨论】:

    • 所以如果我的表格包含 50 个部分,现在我想将表格视图更改为仅包含 5 个具有完全不同数据的部分,我必须删除 50 个部分并添加 5 个部分?我认为这种方法需要更多时间
    • @ItaiCaspi 好吧,是的,所有事情都有边缘情况。但我要重申,我怀疑你在 NowsHeadlineHeaderView 中做的一些效率低下,比如可能是同步网络数据加载?
    • NowsHeadlineHeaderView 类非常简单,它只有 3 个 UILabel,我从一个数组中更新它们。它还有 3 个手势识别器,它们设置在 init 块中。而已。所以我很确定这不会导致问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多