gpt4 book ai didi

ios - UICollectionView 单元格选择和单元格重用

转载 作者:IT老高 更新时间:2023-10-28 11:36:06 25 4
gpt4 key购买 nike

选择单元格后,我想处理更改单元格的外观。我认为委托(delegate)方法 collectionView:didSelectItemAtIndexPath: & collectionView:didDeselectItemAtIndexPath: 是我应该编辑单元格的地方。

-(void)collectionView:(UICollectionView *)collectionView 
didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

DatasetCell *datasetCell =
(DatasetCell *)[collectionView cellForItemAtIndexPath:indexPath];

[datasetCell replaceHeaderGradientWith:[UIColor skyBlueHeaderGradient]];
datasetCell.backgroundColor = [UIColor skyBlueColor];
}

-(void)collectionView:(UICollectionView *)collectionView 
didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {

DatasetCell *datasetCell =
(DatasetCell *)[collectionView cellForItemAtIndexPath:indexPath];

[datasetCell replaceHeaderGradientWith:[UIColor grayGradient]];
datasetCell.backgroundColor = [UIColor myDarkGrayColor];
}

这很好用,除非单元格被重复使用。如果我选择索引 (0, 0) 处的单元格,它会改变外观,但是当我向下滚动时,另一个单元格处于选定状态。

我相信我应该使用 UICollectionViewCell 方法 -(void)prepareForReuse 准备单元格以供重用(即,将单元格外观设置为非选定状态),但它的给我带来困难。

-(void)prepareForReuse {
if ( self.selected ) {
[self replaceHeaderGradientWith:[UIColor skyBlueHeaderGradient]];
self.backgroundColor = [UIColor skyBlueColor];
} else {
[self replaceHeaderGradientWith:[UIColor grayGradient]];
self.backgroundColor = [UIColor myDarkGrayColor];
}
}

当我滚动回顶部时,索引 (0, 0) 处的单元格处于取消选中状态。

当我刚刚使用 cell.backgroundView 属性时,为了防止这种情况发生是:

-(void)prepareForReuse {
self.selected = FALSE;
}

并且选择状态按预期工作。

有什么想法吗?

最佳答案

你的观察是正确的。这种行为是由于单元格的重用而发生的。但是您不必对 prepareForReuse 做任何事情。而是检查 cellForItem 并相应地设置属性。有点像..

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cvCell" forIndexPath:indexPath];


if (cell.selected) {
cell.backgroundColor = [UIColor blueColor]; // highlight selection
}
else
{
cell.backgroundColor = [UIColor redColor]; // Default color
}
return cell;
}

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

UICollectionViewCell *datasetCell =[collectionView cellForItemAtIndexPath:indexPath];
datasetCell.backgroundColor = [UIColor blueColor]; // highlight selection
}

-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {

UICollectionViewCell *datasetCell =[collectionView cellForItemAtIndexPath:indexPath];
datasetCell.backgroundColor = [UIColor redColor]; // Default color
}

关于ios - UICollectionView 单元格选择和单元格重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15665181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com