1

UITableViewのサムネイルにリモート画像を入力するためにSDWebImageを使用する必要があることを十分に理解できました。

私の質問は、セルが表示された直後、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ファイルをプロジェクトに追加します。imageViewerというImageViewerに画像を保持するCustomCellというテーブルにカスタムセルを使用していると仮定して、CustomCell.hにJMImageCache.hファイルをインポートします。CustomCellインターフェイスを更新してJMImageCacheDelegateにし、NSStringimage_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 に答える