UITableView远程缩略图图像,带有占位符本地图像

时间:2012-01-27 16:32:52

标签: iphone uitableview uiimage sdwebimage

我已经足够了解我应该使用SDWebImage在UITableView中使用远程图像填充缩略图。

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

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

建议/建议?

感谢所有

2 个答案:

答案 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上有一个简单的例子。