UICollectionView Tap выбирает более одной ячейки

У меня странная проблема: при нажатии одной UICell в UICollectionView и прокрутке вниз или вверх в UICollectionView я вижу, что выбрано больше одной ячейки. Другие выбранные ячейки, которые не были подключены, по-видимому, выбираются случайным образом по всему макету UICollectionView. У меня есть 3 столбца ячеек и много строк в UICollectionView.

В моем коде у меня есть следующее:

- (void)collectionView:(UICollectionView *)myCV didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    LogInfo(@"Item Selected");
    // highlight the cell user tapped on
    UICollectionViewCell  *cell = [myCV cellForItemAtIndexPath:indexPath];
    [cell.layer setBorderWidth:10.0f];
    cell.layer.borderColor = [UIColor colorWithRed: 108/255. green: 166/255. blue: 16/255. alpha:1.0].CGColor;
    cell.layer.CornerRadius = 10;

}

Код выделения просто помещает границу в повернутую ячейку.

Есть ли способ убедиться, что выбрана только та ячейка, которая нажата?

1 ответ

Решение

Это потому, что клетки могут быть повторно использованы правильно? вот почему вы получаете этот результат.

Решение

  1. Сохраните выбранный путь к указателю где-нибудь.

  2. Подклассируйте вашу ячейку из UICollectionViewCell, затем переопределите метод prepareForReuse UICollectionViewCell, там вы должны сбросить все выполненное вами форматирование (в методе didSelectItemAtIndexPath) до их значений по умолчанию и сделать ячейку готовой к повторному использованию. Подробнее о prepareForReuse здесь

  3. Снова примените то же форматирование в cellForRowItemAtIndexPath к выбранной ячейке, индексный путь которой вы сохранили первым. вот и все!

Но, наконец, я бы посоветовал не делать какие-либо вещи форматирования ячеек прямо здесь. Попытайтесь понять UICollectionViewLayoutAttributes и использовать его, чтобы делать там подобные вещи.

Другие вопросы по тегам