Выбор 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 2

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
    }
}

Я думаю, что вы используете многоразовые ячейки для сбора-в этом есть смысл. Вы должны установить цвет фона по умолчанию перед повторным использованием ячейки.