2 UICollectionView数据源问题

时间:2014-12-22 12:47:34

标签: ios uicollectionview uicollectionviewcell afnetworking-2

我有2个集合视图。对于第一个集合视图,我每次只看到一个单元格,但对于第二个集合视图,我每次看到8个单元格。

因此,对于第二个集合视图,一切正常,但第一个集合视图复制了一些单元格。

如果我在下面使用此代码,则会导致重复单元格出现问题。我不确定单元格是否重复,但每个单元格都包含显示图像的图像视图。因此,这些单元格中的图像是100%保证的重复。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    GalleryCollectionViewCell *collectionViewCell = (GalleryCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"GalleryCollectionViewCell" forIndexPath:indexPath];

    NSDictionary *artwork = [self.artworks objectAtIndex:indexPath.item];

    [collectionViewCell loadImageWithURLString:artwork[@"image_url"]];

    return collectionViewCell;
}

我查看了上面的回调,并为我的第一个集合视图添加了实例,该视图也是我的superview层次结构中的顶级集合视图。现在源代码如下所示:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    if ([collectionView isEqual:self.collectionViewTop])
    {
        GalleryCollectionViewCell *collectionViewCell = (GalleryCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"GalleryCollectionViewCell" forIndexPath:indexPath];

        NSDictionary *artwork = [self.artworks objectAtIndex:indexPath.item];

        [collectionViewCell loadImageWithURLString:artwork[@"image_url"]];

        return collectionViewCell;
    }
    else
    {
        GalleryCollectionViewCell *collectionViewCell = (GalleryCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"GalleryCollectionViewCell" forIndexPath:indexPath];

        NSDictionary *artwork = [self.artworks objectAtIndex:indexPath.item];

        [collectionViewCell loadImageWithURLString:artwork[@"image_url"]];

        return collectionViewCell;
    }
}

我不确定为什么我需要检查集合视图,但它现在可以正常工作。每个单元格显示正确的内容因此,第一个集合视图没有重复的问题。

另外,我可以添加代码如何设置图像:

- (void)loadImageWithURLString:(NSString *)urlString
{
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];

        [self.theImageView setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"home_screen_logo"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

            [self.theImageView setImage:image];

            [self.indicator stopAnimating];

            [self.indicator setHidden:YES];

        } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {

        }];
}

但是我不知道为什么我需要在回调中检查集合视图,因为实际上它和第一个集合视图一样和第二个集合视图一样。要加载图片,请使用AFNetworking功能。

1 个答案:

答案 0 :(得分:0)

听起来像是细胞重用问题。 您是否在customCell的prepareForReuse函数中删除了theImageView?

-(void) prepareForReuse {

    [super prepareForReuse];

    [self.theImageView removeFromSuperview];
    self.theImageView = nil;

    [self.indicator removeFromSuperview];
    self.indicator = nil;
}

我在另一篇文章中对此问题做了更明确的回答:UICollectionView adding image to a cell

但是,我对你的问题的性质可能是错的。让我知道!