在UICollectionView中更改未突出显示的单元格的背景颜色

时间:2014-04-25 03:23:23

标签: ios uicollectionview

我设法在使用此代码轻触时设置单元格背景颜色:

- (void) collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:   (NSIndexPath *)indexPath
{
    NSLog(@"highlighted cell at index path %ld", (long)indexPath.row);

    UICollectionViewCell* cell = [collectionView cellForItemAtIndexPath:indexPath];
    cell.contentView.backgroundColor = [UIColor blueColor];

}

然后我有2个问题

1:我在视图中显示6个单元格,但随后我滑动显示其他单元格,其中一些单元格也以蓝色背景突出显示

2:在我选择单元格A并将背景颜色更改为蓝色后,当我选择B时,A中的背景颜色不会变回白色,我怎么能改回来?

谢谢!

2 个答案:

答案 0 :(得分:0)

您需要在collectionView:cellForItemAtIndexPath:方法中正确重置单元格。

if (/* cell is highlighted */) {
    cell.contentView.backgroundColor = [UIColor blueColor];
} else {
    cell.contentView.backgroundColor = [UIColor whiteColor]; // use whatever is appropriate
}

这当然要求您跟踪应突出显示的单元格。

答案 1 :(得分:0)

如果您只需要在手指触摸单元格时将单元格突出显示为蓝色背景,则可以在didUnhighlightItemAtIndexPath中将颜色更改回白色。

- (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"unhighlighted cell at index path %ld", (long)indexPath.row);

    UICollectionViewCell* cell = [collectionView cellForItemAtIndexPath:indexPath];
    cell.contentView.backgroundColor = [UIColor whiteColor];
}

这使得其他单元格不会以相同的背景颜色回收(问题1),并且在敲击单元格B之前,单元格A在抬起手指后立即返回默认颜色(问题2)。

有关详细信息,请参阅this question and its answers