tableview

时间:2016-06-18 14:47:41

标签: ios swift uitableview networking

我想将图像下载到我的tableViewCell,但我只想将下载的图像放在我的tableview中可见的单元格内。我希望我的tableView在tableviewcell可见时下载图像,并在此期间显示加载栏或其他内容,直到下载完成,然后将该图像显示到相应的tableviewcell

这是我用来向tableviewcell显示图像的代码:

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 :(得分: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;

}