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

时间:2015-04-11 17:17:45

标签: ios objective-c uicollectionview uicollectionviewcell

如何更改单元格外的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)语句中的断点显示,执行了所需的行。但遗憾的是,细胞背景保持不变......

更重要的是,我成功地做了同样的事情UICollectionViewDataSource方法:

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

    cell.backgroundColor = [UIColor orangeColor];

}

我做错了什么?

2 个答案:

答案 0 :(得分:0)

这应该这样做:

- (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];
    }
}

答案 1 :(得分:0)

尝试cellForRowAtIndexPath代替dequeueReusableCellWithReuseIdentifier

编辑:仅限于shouldSelectItemAtIndexPath

说明:dequeueReusableCellWithReuseIdentifier将为您提供一个新单元格,您可以更改其背景颜色,但该单元格永远不会添加到表格中,因此您将无法看到它。当您使用cellForRowAtIndexPath时,您将从表格中获取一个单元格进行编辑。