代码之家  ›  专栏  ›  技术社区  ›  Mihai Damian

刷新UITableView

  •  2
  • Mihai Damian  · 技术社区  · 15 年前

    我有一个UITableView子类和一个UITableViewCell子类,用于单元格。我正在预先构建我的所有单元格,并将它们存储在一个数组中,在cellForRowAtIndexPath中使用它们。除此之外,我还有一个线程,在每个单元格的背景中加载一些图像。问题是单元格刷新的速度不如加载图像的速度快。例如,如果我不滚动我的表视图,只有当所有单元格都被修改并且线程退出时,第一个单元格才会被刷新。

    如何有效地刷新我的tableview/单元格?

    4 回复  |  直到 14 年前
        1
  •  8
  •   Aran Mulholland JohnnyAce    14 年前

    你打过电话吗 [cell setNeedsDisplay] 但是在主线上呢?

    在后台线程上调用setNeedsDisplay时,几乎什么都不做,

    试试这个:

    [cell performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
    
        2
  •  0
  •   Jasarien    15 年前

    是否使用回调通知tableview的控制器图像已加载?如果不是,那将是一种理想的方法。

    加载映像时,向在单元格上设置映像的表视图控制器发出回调,然后在表视图上调用reloadData。 这样,每当加载新图像时,表都会更新以显示它。

        3
  •  0
  •   Grouchal    15 年前

    不确定你想用这些图片实现什么,但我能猜到它们来自服务器吗?这就是为什么你想在另一个线程中下载它们?

    在显示表格之前,我不会尝试加载单元格-您应该尽可能使用延迟加载,以确保充分利用设备上的内存。

    我的建议是考虑使用NSOperation的子类来管理图像的加载。首先,NSOperation将为您处理线程的所有复杂性,并允许您将操作排队。然后,您将能够对顶部单元格中要完成的操作进行优先级排序。

    当每个操作完成时,您可以回调单元格或tableViewController(也许可以创建一个委托协议以使其变得非常简单)。

    如果每个图像/单元格组合有一个操作,则应能够在操作完成时刷新每个单元格。这样做的同时对操作进行优先级排序将为您提供最佳解决方案。

    如果操作听起来很复杂,或者你对此感到厌烦——请尝试一下——这比我说的要简单得多。

        4
  •  0
  •   drewh    15 年前

    [cell setNeedsDisplay]