如何更改单元格外的 UICollectionViewCell 背景

How to change UICollectionViewCell's background outside of cell

如何在单元格外更改 iOS UICollectionViewCell 背景?

例如,我有一个实现了 UICollectionViewDelegate 方法的视图控制器:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.collectionView registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:MY_CELL_REUSE_IDENTIFIER];
}

- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    MyCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:MY_CELL_REUSE_IDENTIFIER forIndexPath:indexPath];

    if (condition)
    {
        [self actionOne];
        cell.backgroundColor = [UIColor redColor];
    }

    else
    {        
        [self actionTwo];
        cell.backgroundColor = [UIColor greenColor];
    }

    return YES;
}

if (condition) 语句中的断点显示,执行了所需的行。但是,遗憾的是,单元格背景保持不变...

更重要的是,我成功地做了几乎相同的事情 id UICollectionViewDataSource 方法:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    MyCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:MY_CELL_REUSE_IDENTIFIER forIndexPath:indexPath];

    cell.backgroundColor = [UIColor orangeColor];

}

我做错了什么?

应该这样做:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    MyCollectionViewCell *cell = [collectionView  cellForItemAtIndexPath:indexPath];

    if (condition)
    {
        [self actionOne];
        cell.backgroundColor = [UIColor redColor];
    }

    else
    {        
        [self actionTwo];
        cell.backgroundColor = [UIColor greenColor];
    }
}

尝试用 cellForRowAtIndexPath 代替 dequeueReusableCellWithReuseIdentifier

编辑:仅在 shouldSelectItemAtIndexPath.

说明:dequeueReusableCellWithReuseIdentifier 会给你一个新的单元格,你可以改变它的背景颜色,但是那个单元格永远不会添加到 table 所以你不会看到它。当您使用 cellForRowAtIndexPath 时,您将从 table 中获取一个单元格进行编辑。