我有一个图像的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循环中,这样x,y和i的值会为每个UIImageView改变。但是,当我在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时,图像显示在每一行中,但滚动滞后很多。任何帮助将不胜感激。感谢。
答案 0 :(得分:2)
使用sdwebimage库sdwebImage
答案 1 :(得分:1)
使用下面的代码在背景中下载图像并将其设置为CELL' IMAGEVIEW。
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];
我希望这会对你有所帮助。
答案 2 :(得分:0)
答案 3 :(得分:0)
在cellForRowAtIndexPath中,检查缓存中图像的可用性(第一次它不会在那里),如果存在则分配它,如果不存在则开始下载。
下载完成后,将图像保存在缓存中并重新加载tabeview,其中将调用cellForRowAtIndexPath,但此时图像将在缓存中可用。
我没有涵盖处理下载失败等所有边缘情况,我希望你能弄明白。
答案 4 :(得分:0)
您可以下载库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;
}
这可能对你有帮助。
答案 5 :(得分:0)
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];
答案 6 :(得分:0)
您可以使用AFNetworking Library。
在视图控制器中导入此标题
#import "UIImageView+AFNetworking.h"
使用以下代码下载图片:
[imv setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:model.imageURL]] placeholderImage:[UIImage imageNamed:@"placeholder_gallery.png"];