У меня есть UICollectionView
с пользовательскими ячейками. У них есть UITextView
, который в основном охватывает всю ячейку. Это создает проблему при использовании didSelectItemAtIndexPath
. Единственный способ вызвать это - вырезать вне UITextView
. Я хочу, чтобы он срабатывал везде, где вы нажимаете, есть ли текстовое представление или нет. Как это можно сделать?
UICollectionView 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 и переключитесь на инспектор атрибутов. Снимите флажок Взаимодействие с пользователем включено, и оно должно работать нормально. Смотрите прикрепленный скриншот!