2016-08-12 4 views
1

У меня есть UICollectionView. Его ячейка имеет UICollectionView внутри нее.Обнаружение выбора ячейки из другой ячейки

enter image description here

можно обнаружить, когда ячейка, содержащая CollectionView касании (через didSelectItemAtIndexPath). Тем не менее, я не могу обнаружить, когда ячейки коллекцииView внутри ячейки (как показано отдельными значками солнца) используются.

Пользовательское взаимодействие включено во всем. И я попытался переопределить hitTest коллекцииView as described here.

Обновление: Я попробовал это снова в простом тестовом проекте, и он отлично работал. Однако в моем текущем проекте по какой-то причине внутри самого вложенного collectionView (с значками солнца) не отображается в отладчике вида.

enter image description here

Обратите внимание, я сделал фон CollectionView синий и его клетки розовый. И они не появляются при просмотре отладки, хотя они появляются в запущенном приложении?

+1

Установили ли вы делегат UICollectionViewCell, который содержит UICollectionView? Это означает, что вы должны подклассифицировать UICollectionViewCell и настроить UICollectionView внутри этого подкласса и установить делегат этого UICollectionView в UICollectionViewCell. Кроме того, вам не нужно будет возиться с тестированием ударов. Очень редко бывает случай, когда цепочка UIResonder нуждается в массовом вмешательстве, и с этим я сомневаюсь, что вам нужно идти дальше, чем правильно делегировать делегирование. – Loxx

+0

@Loxx Да, делегат из inner collectionView установлен в ячейку, в которой он находится в – vikzilla

+1

Хмм, позвольте мне подтянуться и старый проект и посмотреть, как я работал вокруг этого. Я скоро отправлю сообщение – Loxx

ответ

0

Как только я изменил использование XIB для своих ячеек, чтобы использовать обычные ячейки из раскадровки, эта проблема не возникала.

0

Я сделал это раньше ... но это будет немного сложно объяснить. Короткий ответ TapGestures.

Итак, у меня был tableView через раскадровку. Представление коллекции было добавлено программно.

Для ячейки TableView для Row я назвал подкласс UITableViewCell. Который я передал rootView в качестве делегата. Что называется CollectionViewClass. Здесь отображаются фактические элементы для ячейки и добавляются в представление коллекции. На данный момент у меня есть rootdelegate. Для каждого элемента я добавляю tapGesture.

let tap = UITapGestureRecognizer(target: self, action: #selector(viewTapped)) 

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

func viewTapped() { 
    tapDelegate?.milestoneTapped(passID) //tapDelegate = RootView 
} 

Я надеюсь, что это помогает.

+0

Я надеюсь использовать методы делегатов UICollectionView, а не обходной путь, если это возможно.Если я в конечном счете не смогу использовать встроенную функциональность, я попробую это – vikzilla