选择单元格后,我想处理更改单元格外观。我认为委托方法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;
}
并且选择状态按预期工作。
有任何想法吗?