在UITableView中延迟加载图像

58 iphone objective-c uitableview ios

我的约有50个自定义单元格UITableView.我想在单元格中显示图像和标签,我从URL中获取图像.

我想做一个懒惰的图像加载,以便在加载图像时UI不会冻结.我尝试在单独的线程中获取图像,但每次单元格再次可见时我必须加载每个图像(否则重复使用单元格会显示旧图像).有人可以告诉我如何复制此行为.

Tam*_*ing 17

尝试AFNetworking类在此链接https://github.com/AFNetworking/AFNetworking下载此类.在项目中添加所有AFNetworking类.然后只导入此类别

#import "UIImageView+AFNetworking.h" in your Viewcontroller which contains your Tableview.
Run Code Online (Sandbox Code Playgroud)

然后在cellForRowAtIndexPath中:如下所示

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if (cell == nil) 
    {
        cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }

    [cell.imageView setImageWithURL:[NSURL URLWithString:[UrlArray objectAtIndex:indexPath.row]] placeholderImage:[UIImage imageNamed:@"placeholder.jpg"]];
     cell.myLabel.text = [imageNameArray objectAtIndex:indexPath.row];

     cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;    
}
Run Code Online (Sandbox Code Playgroud)

这将异步下载UITableviewcell中的Image for ImageView.当用户滚动Tableview时,它不会一次又一次地下载,因为它也有缓存.下载图像后,使用imageUrl的密钥保存图像.我希望它对你有用.


Jon*_*etz -1

我不知道有任何内置方法可以完成此任务,但听起来您已经有一些与另一个线程一起工作的东西了。

假设您现在唯一剩下的问题是当单元格返回视图时使单元格的内容无效,您应该查看:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

通过实现此委托方法,您可以在绘制之前检查单元格的内容,以查看它是否需要新内容。如果是这样,那么您可以清空单元格内容并再次触发线程加载。

您也可以考虑发布一些代码。