UICollectionView不重新加载单元格的imageView

时间:2013-11-23 00:35:04

标签: objective-c uiimageview uicollectionview reload

我在下面调用了以下代码:

-(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;
    }

1 个答案:

答案 0 :(得分:0)

您访问和存储图像的方式似乎很奇怪。

我这样做的方法是在@property上为UIImage创建productImage

然后您可以询问产品的图像。如果产品返回零图像,则将占位符放在单元格中。

下载完成后,您可以重新加载单元格。

其次,我不会尝试更改您正在进行的下载调用的完成块中的单元格。

完成块应更新模型(即将图像存储到产品对象中),然后重新加载单元格。

原因是您不确定您正在运行完成块的单元格是(a)与您启动它的单元格相同的单元格,或者(b)它仍然显示相同的单元格产品