从图像的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];
我希望这能帮到您。
在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; }
可能是这对你有帮助。