需要为每个 UICollectionViewCell 分配一个背景颜色,即使在滚动时颜色也必须保持特定顺序

Need to assign each UICollectionViewCell a background color and colors must stay in a specific order even while scrolling

我有一套 13 种颜色。当用户滚动 UICollectionView.

时,我需要将这些颜色分配给 UICollectionViewCellsbackgroundColor 属性

目前为止一切正常,但我需要更进一步。我需要让颜色始终按特定顺序显示。

这是一个简单的例子。假设我只有 3 种颜色:红色、黄色和绿色。当集合视图首次加载时,用户会看到红色单元格、黄色单元格和绿色单元格。如果用户一直向下滚动,然后开始向上滚动,他们会看到一个绿色单元格、一个黄色单元格,然后是一个红色单元格。

注意到颜色的顺序是如何始终保持不变的吗?我的问题是找到一种方法来使用我的 13 种颜色。

通常我会设置一个颜色数组并使用 cellForItemAtIndexPath 中的 indexPath.row 访问该数组的索引,就像您访问 table 视图的任何其他普通数据数组一样集合视图,但是一旦我的数据数组中有超过 13 个对象,行数就会大于我的颜色数组数,并且会抛出异常。

我也尝试使用 int 属性 来跟踪颜色,但这不起作用。颜色总是关闭,即使只有一种颜色。

我还意识到我可以创建 13 个单独的 UICollectionViewCell 子类,对 backgroundColor 进行硬编码,为它们提供所有不同的标识符,并尝试在 cellForItemAtIndexPath 中设置一些切换逻辑但这似乎只是为了背景颜色做了大量工作,而且它还会占用更多系统内存,我想尽可能避免延迟。

您应该继续您的第一个想法:13 种颜色的阵列。一旦有了它,您就可以对数组中的元素数量使用 % 运算符,以确保始终具有正确的索引,并且正确的索引可以保持所需的顺序:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    /* Do what you have to do... */

    UIColor *color = [myArrayOfColor objectAtIndex:indexPath.row % [myArrayOfColor count]];
    [cell setBackgroundColor:color];    
    return cell;    
}