2016-02-24 5 views
0

У меня есть вид в коллекции, который имеет ширину в 100 точек с количеством ячеек, каждый из которых также имеет ширину в 100 точек. У меня есть настройка для поддержки прокрутки и подкачки по горизонтали, чтобы пользователь мог щелкнуть влево и вправо, и каждая ячейка занимает весь кадр представления коллекции.Выберите CollectionViewCell при прокрутке в окно

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

Есть ли способ инициировать событие, такое как didSelectItemAtIndexPath, когда данный UICollectionViewCell становится отображаемым в кадре моего коллекционного представления?

ответ

0

UICollectionView отвечает на selectItemAtIndexPath:animated:scrollPosition:.

Он также отвечает на indexPathsForVisibleItems, который будет полезен для определения того, где сделать выбор.

Вы также должны решить, когда сделать выбор, вероятно, лучше всего после получения scrollViewDidEndDecelerating: который делегат наследуется от UIScrollViewDelegate).

Но может быть даже лучше посоветовать посмотреть, что делает ваш код при выборе, и просто сделать это (запускается из того же места в коде, возможно, когда прокрутка завершена), оставляя выбор из него.

+0

'scrollViewDidEndScrollingAnimation' не вызывается, когда мой просмотр коллекции заканчивается прокруткой. мне нужен обратный вызов, когда он прекращает прокрутку, которая не попадает в бесконечный цикл. например, я могу использовать 'willDisplayCell:', который вызывается с правильным указательным направлением текущей ячейки фокусировки при каждом прокрутке. Но, вызывая 'didSelectAtIndexPath' непосредственно в этом обратном вызове, вы получаете бесконечный цикл и сбой. Мне нужно вызвать некоторый метод collectionView, например didSelect, а не просто запускать общий логический код приложения, потому что ячейка должна перейти в свой выделенный режим. –

+0

Ох. К сожалению, метод (для инициированных пользователем свитков) - это 'scrollViewDidEndDecelerating'. См. Править. Также убедитесь, что ваш VC является делегатом коллекционного представления. – danh

+0

, конечно, я установил свой делегат. проблема в том, что я действительно хотел бы сделать, это просто вызвать 'didSelect' в любом обратном вызове, который я получаю при завершении прокрутки. я считаю, что 'didEndDecelerating' не должен приводить к бесконечному циклу, поскольку он не перезапускается' didSelect' так, как это делает 'willDisplayCell' .. проблема, которую я вижу с помощью' didEndDecelerating', это не имеет индексный путь как параметр, так как я могу определить, какую ячейку активировать? –

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