从图像的URL数组中添加图像到UITableViewCell

我有一个图像的URL数组,我想显示在UITableView单独的单元格上的每个URL的图像。 在我之前使用的代码中:

UIImageView *view_Image = [[UIImageView alloc]initWithFrame:CGRectMake(x, y, 400, 180)]; view_Image.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:arrURL[i]]]]; 

这是在一个for循环内,使得每个UIImageView的x,y和i的值都会改变。 但是,这种方法不起作用,当我在cellForRowAtIndexPath使用此。 图像没有得到显示,我的cellForRowAtIndexPath实现是:

 -(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *simpleIdentifier = @"simpleIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleIdentifier]; if(cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleIdentifier]; } cell.textLabel.text = _arrNames[indexPath.row]; UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(3,2, 300, 150)]; imv.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:arr[i]]]]; [cell.contentView addSubview:imv]; return cell; } 

另外,当我直接添加图像的url,图像显示在每一行,但滚动滞后了很多。 任何帮助将不胜感激。 谢谢。

使用sdwebimage库sdwebImage

使用下面的代码在后台下载图像,并将其设置到CELL的图像浏览。

 UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(3,2, 300, 150)]; [imv sd_setImageWithURL:[NSURL URLWithString:arrURL[i]] placeholderImage:[UIImage imageNamed:@"placeholder.jpg"]]; [cell.contentView addSubview:imv]; 

我希望这能帮到您。

使用这个库,它会帮助你。

https://github.com/nicklockwood/AsyncImageView

它顺利地滚动uitableview。

在cellForRowAtIndexPath中,检查caching中图像的可用性(第一次不会有),如果存在则分配它,如果不存在,则开始下载。

下载完成后,将图像保存到caching中,然后重新加载tabeview,这个int将调用cellForRowAtIndexPath,但是这个时候的图像将在caching中可用。

我没有涵盖所有的边缘情况,如处理下载失败,我希望你会弄清楚。

 UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(3,2, 300, 150)]; [imv sd_setImageWithURL:[NSURL URLWithString:arrURL[i]] placeholderImage: [UIImage imageNamed:@"placeholder.jpg"]]; [cell.contentView addSubview:imv]; 

您可以使用AFNetworking库。

在你的视图控制器中导入这个头

 #import "UIImageView+AFNetworking.h" 

使用下面的代码来下载图片:

 [imv setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:model.imageURL]] placeholderImage:[UIImage imageNamed:@"placeholder_gallery.png"]; 

您可以下载SDWebImage库,然后将其导入到您的项目中。

 #import "UIImageView+UIActivityIndicatorForSDWebImage.h" 

然后在您的UITableView委托方法中编写下面的代码。

 -(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *simpleIdentifier = @"simpleIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleIdentifier]; if(cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleIdentifier]; } cell.textLabel.text = _arrNames[indexPath.row]; NSURL *imgURL = [NSURL URLWithString:@"Your URL String"]; [cell.imgView sd_setImageWithURL:imgURL placeholderImage:[UIImage imageNamed:@"no-image"] options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { if (image) { cell.imv.image = image; }else{ cell.imv.image = [UIImage imageNamed:@"no-image"]; } }]; [cell.contentView addSubview:imv]; return cell; } 

可能是这对你有帮助。