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 ответ
Это потому, что клетки могут быть повторно использованы правильно? вот почему вы получаете этот результат.
Решение
Сохраните выбранный путь к указателю где-нибудь.
Подклассируйте вашу ячейку из UICollectionViewCell, затем переопределите метод prepareForReuse UICollectionViewCell, там вы должны сбросить все выполненное вами форматирование (в методе didSelectItemAtIndexPath) до их значений по умолчанию и сделать ячейку готовой к повторному использованию. Подробнее о prepareForReuse здесь
Снова примените то же форматирование в cellForRowItemAtIndexPath к выбранной ячейке, индексный путь которой вы сохранили первым. вот и все!
Но, наконец, я бы посоветовал не делать какие-либо вещи форматирования ячеек прямо здесь. Попытайтесь понять UICollectionViewLayoutAttributes и использовать его, чтобы делать там подобные вещи.