我想将图像下载到我的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()只打印可见单元格的行。
我是否实施了这个错误?
答案 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;
}