2016-06-18 15 views
0

私はtableViewCellに画像をダウンロードしたいと思っていますが、私のテーブルビューでVISIBLEであるセルの中にダウンロードされた画像しか望みません。 tableviewcellが表示されているときに、ダウンロードした画像が対応するtableviewcellに表示されるまで、ローディングバーなどを表示するには、tableviewcellを表示する必要があります。tableviewの可視セルのメソッド

これは私がイメージを表示するために使用するコードですテーブルビューセルへ:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("ContentCell", forIndexPath: indexPath) 

    let contentCell = cell as! ContentCell 

    contentCell.thumbnail.kf_setImageWithURL(self.contentArray[indexPath.row].thumbnailUrl) 
    print("row: \(indexPath.row)") 


    return contentCell 
} 

すべての画像は一度にすべてダウンロードされます。私がこれを知っているのは、スクロールダウンすると、ロギングメソッドprint()が可視のセルの行だけを表示しても、すべてのイメージが遅滞なく即座に表示されることがわかります。

私はこれを間違って実装していますか?

+1

あなたがあなたの質問に手の込んだ非同期画像の読み込み –

+0

について話しているを使用して実現するのでしょうか? – samitarmum

+1

1.イメージをダウンロードしてローカルデータベースに格納し、パスを呼び出します。 2.非同期イメージロードメソッドは、テーブルビューをスクロールしながらイメージをロードするために使用します。 3.画像をダウンロードしてデータを保存し、アレイに割り当てた後、画像を表示する配列 –

答えて

0

あなたは非同期のイメージ読み込み

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

cell.poster.image = nil; // or cell.poster.image = [UIImage imageNamed:@"placeholder.png"]; 

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://myurl.com/%@.jpg", self.myJson[indexPath.row][@"movieId"]]]; 

NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 
    if (data) { 
     UIImage *image = [UIImage imageWithData:data]; 
     if (image) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       MyCell *updateCell = (id)[tableView cellForRowAtIndexPath:indexPath]; 
       if (updateCell) 
        updateCell.poster.image = image; 
      }); 
     } 
    } 
}]; 
[task resume]; 

return cell; 

}

関連する問題