我可以使用下面的代码在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/