CollectionView在滚动时突出显示错误的单元格

时间:2015-03-17 11:27:45

标签: ios objective-c

我有UICollectionView。当用户单击一个单元格时,单元格的颜色变为红色。我编写了上面的部分,它的工作完美。

但是,当我在下面滚动时,集合视图中的其他单元格已突出显示为红色。我确信它没有被选中但只是突出显示。

我该如何解决这个问题。

我的代码如下:

cellForItemAtIndexPath 方法

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *CellIdentifier = @"cell";

    ViewCell *vc = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

    vc.vciv.image = [arrayOfImages objectAtIndex:indexPath.row];

    return vc;

}

didSelectItemAtIndexPath 方法

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath  {

    if([items  containsObject:allItem[indexPath.row]] ){
        UICollectionViewCell *c =[collectionView cellForItemAtIndexPath:indexPath];
        c.backgroundColor = [UIColor clearColor]; 
    } else {
        UICollectionViewCell *c =[collectionView cellForItemAtIndexPath:indexPath];
        c.backgroundColor = [UIColor redColor]; 
 }

1 个答案:

答案 0 :(得分:1)

当集合视图单元格被重用时,您需要确保cellForItemAtIndexPath:方法中没有突出显示出列单元格:

UICollectionViewCell *vc = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
vc.backgroundColor = [UIColor clearColor];

此代码将在出列时始终清除单元格的背景。如果您需要保留突出显示,则需要存储要突出显示的单元格的indexPath,并检查该列表中的当前单元格。

修改

您的items变量似乎非常适合这样做。 所以你会这样做:

UICollectionViewCell *vc = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
vc.backgroundColor = [items containsObject:allItem[indexPath.row]] ? [UIColor redColor] : [UIColor clearColor];