1

我已经知道我应该使用 SDWebImage 来用远程图像填充 UITableView 中的缩略图了。

我的问题是,如何在每个单元格中显示一个默认缩略图,该缩略图在单元格显示后和 SDWebImage 完成加载之前可见?

而且我想在没有可用远程图像的情况下也应该显示默认缩略图。

建议/建议?

谢谢大家

4

2 回答 2

1

苹果有一个关于延迟加载图像的非常好的官方示例:

http://developer.apple.com/library/ios/#samplecode/LazyTableImages/index.html

这个想法很简单,首先设置您的占位符图像,因为没有下载并开始下载该字段的图像,当它完成时,将调用一个回调到您的 tableViewController 并重新加载相关 indexPaths 中的相关单元格。如果下载失败,则永远不会调用回调,并且您的占位符图像将永远存在。

于 2012-01-27T17:23:05.107 回答
1

最初,您可以将所有单元格设置为具有默认图像。然后,您可以使用回调委托来更新所需的单元格,以便在加载图像后获得图像。我目前使用JMImageCache进行远程图像处理,这使得这非常容易。

首先,将 JMImageCache.h 和 JMImageCache.m 文件添加到您的项目中。假设您正在为名为 CustomCell 的表使用自定义单元格,该单元格将图像保存在名为 imageViewer 的 ImageViewer 中,请在 CustomCell.h 中导入 JMImageCache.h 文件。更新您的 CustomCell 接口以使其成为 JMImageCacheDelegate,同时添加一个 NSString image_url 字段:

@interface CustomCell : UITableViewCell <JMImageCacheDelegate>
{
NSString *image_url; 
...
}

// Also set image_url property fields so that it can be accessed from other files

然后我们需要处理图像何时完成下载,以便更新单元格的图像。合成 image_url 并将以下内容添加到 CustomCell.m。

- (void) cache:(JMImageCache *)c didDownloadImage:(UIImage *)i forURL:(NSString *)url
{
if ([url isEqualToString:image_url]) {
    [self.imageViewer setImage:i];
    [self setNeedsLayout];
}
}

然后在索引路径函数的单元格中包含 tableView 的文件中:

CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
if (cell == nil) {
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil];
    for (id currentObject in topLevelObjects) {
        if ([currentObject isKindOfClass:[UITableViewCell class]]) {
            cell = (CustomCell *)currentObject;
            break;
        }
    }
}

[cell.imageViewer setImage:[UIImage imageNamed:"default.png"]];

//Code for getting string of URL you want for current cell called 'cell_image'

[cell setImage_url:cell_image];
[cell.imageViewer setImage:[[JMImageCache sharedCache] imageForURL:image_url delegate:cell]];

如果您需要更多帮助,JMImageCache 在 github 上有一个简单的示例。

于 2012-01-27T18:29:54.583 回答