【问题标题】:How to asynchronous reload the UIImage in one UITableView cell/row?如何在一个 UITableView 单元格/行中异步重新加载 UIImage?
【发布时间】:2012-07-01 16:54:35
【问题描述】:

在有一些单元格的 UITableView 中,每个单元格都有两个 UIImage,我将更新 UIImage 异步以提高性能。但是有一个问题,当从 Web 中提取图像时,我如何才能仅在单元格中重新加载 UIImageView。

我知道可以使用方法“reloadRowsAtIndexPaths”重新加载整个单元格,但我只想知道是否有一种方法只能重新加载 UIView 对象,该对象必须在单元格中重新加载(即图像或标签) .

顺便说一句,当我重新加载一个单元格时,我发现方法“reloadRowsAtIndexPaths”将对所有单元格执行“heightForRowAtIndexPath”方法。有什么问题吗?

【问题讨论】:

    标签: objective-c uitableview


    【解决方案1】:

    也许苹果的示例代码LazyTableImages 是您想要的。

    【讨论】:

    • 顺便说一句,当我重新加载一个单元格时,我发现方法“reloadRowsAtIndexPaths”将对所有单元格执行“heightForRowAtIndexPath”方法。我说的对吗?
    • @rotyger 可以通过在方法中设置断点来查看。
    【解决方案2】:

    获取对调用 tableView:cellForRowAtIndexPath: 的自定义单元格的引用。然后更新它的图像属性运行这个:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        NSData *imageData = [NSData dataWithContentsOfURL:someURL];
        dispatch_async(dispatch_get_main_queue(), ^{
            cell.someImage = [UIImage imageWithData:imageData];
        });
    });
    

    您将最多同时加载 6 张图片,因为这是 NSURLConnection 的限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 2017-08-05
      • 2011-07-22
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 2011-07-27
      相关资源
      最近更新 更多