我可以使用下面的代码在cellforitematindexpath中更改收藏视图单元格的背景颜色,但不能在didselectitematindexpath中更改(我只在一个位置更改颜色)。这是怎么发生的?我知道didselectitematindexpath被调用。

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    CollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"CollectionView" forIndexPath:indexPath];
    cell.layer.borderWidth=1.0f;
    cell.layer.borderColor=[UIColor grayColor].CGColor;
    cell.label.text = @"test"
    cell.contentView.backgroundColor = [UIColor redColor];

    return cell;
}

-(void)collectionView:(UICollectionView *)cv didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"selected cell");
    CollectionViewCell *cell = [self collectionView:cv cellForItemAtIndexPath:indexPath];
    cell.contentView.backgroundColor = [UIColor redColor];
}

最佳答案

这里有几处错误。


您使用错误的方法来获取选定的单元格。切勿直接调用委托方法,而是直接向集合视图询问单元格,如下所示:

CollectionViewCell * cell = [cv cellForItemAtIndexPath:indexPath];
您正在修改单元格的地方,这些修改将不会持续。当滚动并重新使用该单元格时,颜色将被擦除。相反,应该在选定单元格时调用reloadItemsAtIndexPaths:,并在collectionView:cellForRowAtIndexPath中包含一些代码来检查单元格的selected属性并基于该属性设置所需的颜色。这样,当您滚动并重复使用单元格时,布局将保持一致。

关于ios - UICollectionViewCell背景颜色更改在cellForItemAtIndexPath中起作用,但在didSelectItemAtIndexPath中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25376276/

10-10 15:00