为了账号安全,请及时绑定邮箱和手机立即绑定

在UITableView中延迟加载图像

/ 猿问

在UITableView中延迟加载图像

跃然一笑 2019-08-01 16:26:59

在UITableView中延迟加载图像

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

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


查看完整描述

3 回答

?
慕村225694

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

#import "UIImageView+AFNetworking.h" in your Viewcontroller which contains your Tableview.

然后在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;    }

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


查看完整回答
反对 回复 2019-08-01
?
慕标琳琳

我建议去NSOperation并在另一个线程上做你需要的任何事情。

这是我为图像加载编写的一个类:

- (id)initWithTarget:(id)trgt selector:(SEL)sel withImgURL:(NSString *)url {
    if(self = [super init]) {
        if(url == nil || [url isEqualToString:@""])
            return nil;
        target = trgt;
        action = sel;
        imgURL = [[NSURL alloc] initWithString: url];
    }
    return self;}- (void)main {
    [NSThread detachNewThreadSelector:@selector(loadImage) toTarget:self withObject:nil];}- (void)loadImage {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    UIImage *img = [UIImage imageNamed: @"default_user.png"];
    if(![[imgURL absoluteString] isEqualToString: @"0"]) {
        NSData *imgData = [NSData dataWithContentsOfURL: imgURL];
        img = [UIImage imageWithData: imgData];
    }
    if([target respondsToSelector: action])
        [target performSelectorOnMainThread: action withObject: img waitUntilDone: YES];
    [pool release];}- (void)dealloc {
    [imgURL release];
    [super dealloc];}

希望有所帮助!


查看完整回答
反对 回复 2019-08-01
?
RISEBY

你可以使用自我图像按钮..你可以从github下载自我图像按钮文件...添加到你的项目....

在你的xib中的图像视图中更改类“自我图像按钮”...

延迟加载称为同步请求..

自我形象称为异步请求。自我形象不要等待回应..一次显示所有图像..


查看完整回答
反对 回复 2019-08-01

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信