2012-01-27 4 views
1

私は、リモート画像を使ってUITableViewのサムネイルを作成するためにSDWebImageを使用しているはずです。UITableViewリモートサムネイル画像(プレースホルダローカル画像あり)

私の質問は、SDWebImageの読み込みが完了する前に、セルが表示されるとすぐに表示されるデフォルトのサムネイルをどのように各セルに表示させることができますか?

また、使用可能なリモートイメージがない場合にもデフォルトのサムネイルを表示する必要があります。

アドバイス/提案?

おかげで、すべての

+0

デフォルトの画像を追加するだけでなく、他の画像がダウンロードされたときに上に描画するのはなぜですか? – ader

答えて

1

最初は、すべてのセルにデフォルト画像を設定できます。その後、コールバックデリゲートを使用して、必要なセルを更新して、イメージがロードされたらそれを保持することができます。私は現在、この非常に簡単に私のリモート画像処理のためにJMImageCacheを使用しています。

まず、JMImageCache.hファイルとJMImageCache.mファイルをプロジェクトに追加します。 imageViewerという名前のImageViewerでイメージを保持するCustomCellというテーブル用のカスタムセルを使用していると仮定して、CustomCell.hでJMImageCache.hファイルをインポートします。また、それJMImageCacheDelegate作るのNSString IMAGE_URLフィールドを追加するにはCustomCellインターフェイスを更新します。私たちは、その後、細胞の画像が更新されるように画像のダウンロードが終了したときに処理する必要が

@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の上の簡単な例があります。

1

リンゴから遅延ロードされた画像については本当に良いの公式の例があります:

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

アイデアが最初に何のダウンロードと起動がないので、あなたのプレースホルダの画像を設定し、簡単ですがそのフィールドのイメージをダウンロードすると、終了時にコールバックがtableViewControllerに呼び出され、関連するindexPathの関連するセルがリロードされます。ダウンロードが失敗した場合、コールバックは呼び出されず、プレースホルダイメージは永遠にそこにあります。

関連する問題