我在下面调用了以下代码:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
不幸的是,当我调用[collectionView reloadItemsAtIndexPaths:@[indexPath]];
时,其中的imageView不会更新。如果我调用reloadData,它会。我试图保持代码尽可能高效,所以我不想只调用reloadData。是否有人能够了解为什么这不起作用或我还需要做什么?我已经遇到了一些其他问题,加载了许多API图像查询,这些查询与collectionView的可爱endAnimations相冲突。任何帮助,将不胜感激。
SearchResultsCollectionViewCell *searchResultCell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([SearchResultsCollectionViewCell class]) forIndexPath:indexPath];
Product *product = self.products[indexPath.row];
UIImage *productImage = [self.imageCache imageForURL:product.fullImageUrl];
if (productImage) {
searchResultCell.productImageView.image = productImage;
} else {
[self.imageCache downloadImageForURL:product.fullImageUrl indexPath:indexPath withCompletion:^(UIImage *image, NSError *error) {
if (!error) {
searchResultCell.productImageView.image = image;
// [collectionView reloadData];
[collectionView reloadItemsAtIndexPaths:@[indexPath]];
}
}];
UIImage* image = [UIImage imageNamed:@"001_logo"];
searchResultCell.productImageView.image = image;
}
答案 0 :(得分:0)
您访问和存储图像的方式似乎很奇怪。
我这样做的方法是在@property
上为UIImage
创建productImage
。
然后您可以询问产品的图像。如果产品返回零图像,则将占位符放在单元格中。
下载完成后,您可以重新加载单元格。
其次,我不会尝试更改您正在进行的下载调用的完成块中的单元格。
完成块应更新模型(即将图像存储到产品对象中),然后重新加载单元格。
原因是您不确定您正在运行完成块的单元格是(a)与您启动它的单元格相同的单元格,或者(b)它仍然显示相同的单元格产品