UICollectionView didSelectItemAtIndexPath не вызывается при использовании UITextView

У меня есть UICollectionView с пользовательскими ячейками. У них есть UITextView, который в основном охватывает всю ячейку. Это создает проблему при использовании didSelectItemAtIndexPath. Единственный способ вызвать это - вырезать вне UITextView. Я хочу, чтобы он срабатывал везде, где вы нажимаете, есть ли текстовое представление или нет. Как это можно сделать?

Ответ 1

Я бы предложил использовать UIGestureRecognizer для каждой ячейки, и когда она записана, чтобы отправить ее на UITextView или что-то еще, возможно, там могут быть лучшие решения, но я бы использовал это 1 из-за простоты.

Ответ 2

didSelectItemAtIndexPath вызывается при none of the subView of collectionViewCell respond to that touch. Поскольку textView реагирует на эти касания, поэтому он won't forward those touches к его супервизу, поэтому collectionView не получит его.

переопределить hitTest:withEvent метод вашего подкласса collectionViewCell или CollectionView и всегда возвращать self из них. Так он явно делает collectionView как first responder.

Ответ 3

Вы переопределяете touchesEnded: withEvent:?

У меня была такая же проблема сегодня, и я обнаружил, что у меня есть некоторая настраиваемая логика в touchesEnded в одном из представлений контейнера коллекции, и я не вызывал

 [super touchesEnded: withEvent:]

когда я закончил свою настраиваемую логику в touchesEnded.

После добавления супервызов все в порядке.

Ответ 4

Я столкнулся с этой проблемой, когда у меня появилось представление прокрутки, охватывающее всю мою ячейку просмотра коллекции. Хотя все вышеперечисленные решения, вероятно, работают нормально, я придумал свою собственную элегантную работу. Я поместил метку "select" под свой просмотр прокрутки. Поскольку метка не является частью представления прокрутки, она передает событие tap в виде коллекции. Он также служит хорошим индикатором того, что требуется действие пользователя.

Ответ 5

Благодаря @santhu я смог решить эту проблему. Поскольку я решил эту проблему на раскадровке, я подумал, что было бы неплохо добавить ответ здесь.

Выберите UITextView в этом конкретном UICollectionViewCell и переключитесь на инспектор атрибутов. Снимите флажок Взаимодействие с пользователем включено, и оно должно работать нормально. Смотрите прикрепленный скриншот!

enter image description here