Выбор UICollectionViewCell выделяет/подчеркивает каждый 5 клеток
У меня есть горизонтальный collectionview с кодом, чтобы выделить / раскрасить выбранную ячейку. Он выделяет выделенную ячейку,но затем каждые 5 ячеек после этого также выделяются. Есть идеи, что происходит?
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
for(int x = 0; x < [cellArray count]; x++){
UICollectionViewCell *UnSelectedCell = [cellArray objectAtIndex:x];
UnSelectedCell.backgroundColor = [UIColor colorWithRed:0.2 green:0.5 blue:0.8 alpha:0.0];
}
UICollectionViewCell *SelectedCell = [cellArray objectAtIndex:indexPath.row];
SelectedCell.backgroundColor = [UIColor colorWithRed:0.2 green:0.5 blue:0.8 alpha:1.0];
cellSelected = indexPath.row;
NSLog(@"%i", cellSelected);
}
2 ответа:
Это происходит потому, что ячейки используются повторно при прокрутке. Вы должны сохранить статус "выделено" для всех строк в вашей модели (например, в массиве или
NSMutableIndexSet
), а вcollectionView:cellForItemAtIndexPath:
задать цвет фона ячейки в соответствии со статусом для этой строки.В
didSelectItemAtIndexPath
должно быть достаточно задать цвет вновь выбранного элемента. и ранее выбранная ячейка.обновление: Если только одна ячейка может быть выбрана одновременно, вам просто нужно помните, что путь к индексу выбранной ячейки.
Объявите свойство
selectedIndexPath
для текущей выделенной строки:@property (strong, nonatomic) NSIndexPath *selectedIndexPath;
В
didSelectItemAtIndexPath
, Снимите подсветку с предыдущей ячейки и выделите новую ячейку:- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { if (self.selectedIndexPath != nil) { // deselect previously selected cell UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:self.selectedIndexPath]; if (cell != nil) { // set default color for cell } } // Select newly selected cell: UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; if (cell != nil) { // set highlight color for cell } // Remember selection: self.selectedIndexPath = indexPath; }
В
cellForItemAtIndexPath
используйте правильный цвет фона:- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Identifier" forIndexPath:indexPath]; if ([self.selectedIndexPath isEqual:indexPath) { // set highlight color } else { // set default color } }