Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: motionpotionОтветов: 1

У меня возникает странная проблема, когда я касаюсь одной ячейки 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;

}

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

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

uicollectionviewselectionuitapgesturerecognizeruicollectionviewcell

Ответы

Ответ 1 · рейтинг 2 · Jirune

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

Решение

  1. Сохраните выбранный indexpath где-нибудь.

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы