从图像的URL数组向UITableViewCell添加图像

时间:2016-02-17 11:20:52

标签: ios objective-c uitableview

我有一个图像的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时,图像显示在每一行中,但滚动滞后很多。任何帮助将不胜感激。感谢。

7 个答案:

答案 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)

使用此库,它会对您有所帮助。

https://github.com/nicklockwood/AsyncImageView

它顺利滚动uitableview。

答案 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"];