我已经知道我应该使用 SDWebImage 来用远程图像填充 UITableView 中的缩略图了。
我的问题是,如何在每个单元格中显示一个默认缩略图,该缩略图在单元格显示后和 SDWebImage 完成加载之前可见?
而且我想在没有可用远程图像的情况下也应该显示默认缩略图。
建议/建议?
谢谢大家
我已经知道我应该使用 SDWebImage 来用远程图像填充 UITableView 中的缩略图了。
我的问题是,如何在每个单元格中显示一个默认缩略图,该缩略图在单元格显示后和 SDWebImage 完成加载之前可见?
而且我想在没有可用远程图像的情况下也应该显示默认缩略图。
建议/建议?
谢谢大家
苹果有一个关于延迟加载图像的非常好的官方示例:
http://developer.apple.com/library/ios/#samplecode/LazyTableImages/index.html
这个想法很简单,首先设置您的占位符图像,因为没有下载并开始下载该字段的图像,当它完成时,将调用一个回调到您的 tableViewController 并重新加载相关 indexPaths 中的相关单元格。如果下载失败,则永远不会调用回调,并且您的占位符图像将永远存在。
最初,您可以将所有单元格设置为具有默认图像。然后,您可以使用回调委托来更新所需的单元格,以便在加载图像后获得图像。我目前使用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 上有一个简单的示例。