2

У меня есть UICollectionView Я использую как контейнер для выбора инструментов. У вас есть много инструментов (ячеек), когда вы их выбираете, выбранный из них не выбран и так далее ... У вас может быть только один инструмент, выбранный за раз.UICollectionView выбор не длится

Проблема в том, что я не могу выделить ячейки. Когда я нажимаю на ячейку, вызывается collectionView:didSelectItemAtIndexPath:. Затем я перезаряжаю выбранную ячейку, чтобы изменить ее внешний вид (я изменяю alpha изображения), используя [collectionView reloadItemsAtIndexPaths:@[indexPath]].

Хорошо, что перезаряжает ячейку нормально, за исключением одной проклятой вещи: в collectionView:cellForItemAtIndexPath: ячейка никогда не получает selected свойство установлено на YES! Поэтому я никогда не могу изменить alpha, потому что я никогда не знаю, когда я должен нарисовать выбранную ячейку или нет.

Хуже: [collectionView indexPathsForSelectedItems] всегда пуст !!!

Я даже не говоря уже о том, что collectionView:didDeselectItemAtIndexPath: никогда не называют ...

Ну, если кто-то может помочь мне понять, что происходит, заранее спасибо ...

+0

+1 .. хороший вопрос. Я попытался решить вашу проблему. Но я потерял контроль :) –

+0

Спасибо за попытку, вы можете остановить решение @ daltonclaybrook, это одно! – Zaphod

ответ

6

Когда вы звоните reloadItemsAtIndexPaths: представление коллекции отбрасывает эти ячейки и создает новые, отбрасывая выбранное состояние ячеек.

Я хотел бы предложить несколько различных вариантов:

1.) В collectionView:didSelectItemAtIndexPath: вызова cellForItemAtIndexPath:, чтобы получить ссылку на выбранную ячейку и обновить его внешний вид там.

2.) (Мой любимый) Используйте специальный подкласс UICollectionViewCell, если вы еще этого не сделали, и переопределите метод setSelected:. Там вы будете уведомлены, когда ячейка выбрана, и вы можете обновить внешний вид из подкласса.

+0

Спасибо! Я использовал второй, когда работал с пользовательским подклассом. Gratz! – Zaphod

0

Что касается выбора несколько ячейки на один раз, вы должны попробовать allowsMultipleSelection свойства [myCollectionView setAllowsMultipleSelection:YES] Документов для этого здесь: https://developer.apple.com/library/ios/documentation/uikit/reference/UICollectionView_class/Reference/Reference.html#//apple_ref/occ/instp/UICollectionView/allowsMultipleSelection

В противном случае, ответ @ daltonclaybrook является достаточным.

Смежные вопросы