如何在滚动时保持UICollectionViewCells的背景颜色不变?

时间:2013-02-25 05:53:56

标签: ios objective-c uicollectionview

我的UICollectionView个单元格在加载时有contentview背景颜色为白色。用户可以通过选择单元格将单元格contentview的背景颜色更改为青色,假设布尔值(isSplitting)设置为YES

enter image description here

当我在屏幕上放置更多单元格并且用户选择了单元格并因此将其contentview的背景颜色更改为青色时,我的问题就出现了。

我有一些实例,其中青色的单元格被滚动到视图之外,当滚动回来时是白色的。我也有一些情况,其中非青色的单元格滚动到视图中并且是青色的。

我知道单元格正在被重新出现以便在重新加载到不同的indexpath时保留其背景颜色。

我已经解决了在滚动到视图时未选择的单元格成为青色的问题。然而,当滚动进出视图时,我无法解决某些选定单元格失去青色的问题。

以下是cellForItemAtIndexPath中的当前逻辑。

if (!isSplitting) {
        cell.contentView.backgroundColor = [UIColor whiteColor];
    }
    else{
        for (NSIndexPath *collectionIndexPath in [self.myCollectionView indexPathsForSelectedItems]) {
            if (indexPath == collectionIndexPath) {
                cell.contentView.backgroundColor = [UIColor cyanColor];
                break;
            }
            else{
                cell.contentView.backgroundColor = [UIColor whiteColor];
            }
        }
    }

我知道确实选择了正确的单元格,因为使用上述循环的另一个操作会产生所需的结果。如果我选择前几个项目(将它们转为青色),向右滚动并选择第10个项目,逻辑似乎会崩溃。当我向左滚动时,第一对仍然是青色,但在向右滚动时,第10对又回到白色。

1 个答案:

答案 0 :(得分:1)

使用isEqual:比较indexPaths而不是==

if ([indexPath isEqual:collectionIndexPath]) {