ios - 如何在滚动时保持 UICollectionView Cells 的背景颜色不变?

标签 ios objective-c uicollectionview

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

enter image description here

当我有更多的单元格然后适合屏幕并且用户选择了单元格并因此将他们的内容 View 的背景颜色更改为青色时,我的问题就出现了。

我有这样的例子,青色的单元格被滚动到 View 之外,而当滚动回来时是白色的。我也有一些实例,其中不是青色的单元格滚动到 View 中并且是青色的。

我知道当加载到不同的 indexpath 时,单元格正在出队以供重用并保留其背景颜色。

我已经解决了未选中的单元格在滚动到 View 中时变为青色的问题。但是,我无法解决某些选定单元格在滚动进出 View 时失去青色的问题。

这是我在 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];
            }
        }
    }

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

最佳答案

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

if ([indexPath isEqual:collectionIndexPath]) {

关于ios - 如何在滚动时保持 UICollectionView Cells 的背景颜色不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15060922/

相关文章:

ios - 从 UICollectionViewCell 呈现 AlertView

ios - Travis CI、Xcode - 使用 xcpretty 时不会进一步传递退出命令

iphone - 如果它是应用程序的第一次运行,请打开设置

ios - 如何在 ios 钥匙串(keychain)中手动存储?

ios - 针对 iPhone 6/iPhone 6 plus 优化应用

objective-c - NSTableView无限滚动或分页

ios - UICollectionView 中的固定项目距离

ios - 如何将工具栏实现为 UICollectionView 的标题

ios - mvvm 中的 UITextfield 委托(delegate)方法

ios - 如何将结构传递给 NSOperation Init