我已经足够了解我应该使用SDWebImage在UITableView中使用远程图像填充缩略图。
我的问题是,如何在显示单元格后以及SDWebImage完成加载之前,每个单元格中都有一个默认缩略图?
我认为在没有远程图像可用的情况下也应该显示默认缩略图。
建议/建议?
感谢所有
答案 0 :(得分:1)
关于延迟加载图像的苹果有一个非常好的官方示例:
http://developer.apple.com/library/ios/#samplecode/LazyTableImages/index.html
这个想法很简单,首先设置你的占位符图像,因为没有下载并开始下载该字段的图像,当它完成后,将调用回调给你的tableViewController并重新加载相关indexPaths中的相关单元格。如果下载失败,则永远不会调用回调,并且您的占位符图像将永远存在。
答案 1 :(得分: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上有一个简单的例子。