При выборе ячейки я хочу обработать изменение внешнего вида ячейки. Я понял, что метод делегата 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;
}
и состояние выбора работало по назначению.
Любые идеи?