J'ai une UICollectionView
avec des cellules personnalisées. Ils ont une UITextView
qui couvre principalement la totalité de la cellule. Cela pose un problème lorsque vous utilisez didSelectItemAtIndexPath
. La seule façon de le déclencher est en appuyant sur en dehors de UITextView
. Je souhaite qu'il se déclenche où que vous soyez dans la cellule, qu'il y ait ou non une vue en texte. Comment cela peut-il être fait?
Je suggérerais d’utiliser UIGestureRecognizer
pour chaque cellule et, lorsque celle-ci est enregistrée, de l’envoyer à UITextView
ou peu importe, il existe peut-être une meilleure solution, mais j’utiliserais cette option pour des raisons de simplicité.
didSelectItemAtIndexPath
est appelé lorsque none of the subView of collectionViewCell respond to that touch
. Étant donné que textView
répond à ces touches, won't forward those touches
est ajouté à son superView afin que collectionView ne l'obtienne pas.
surcharger la méthode hitTest:withEvent
de votre sous-classe collectionViewCell
ou CollectionView
et toujours renvoyer self
de leur part. Ainsi, collectionView devient explicitement first responder
.
Remplacez-vous touchesEnded: withEvent:
?
J'ai eu le même problème aujourd'hui et j'ai constaté que j'avais une logique personnalisée dans touchesEnded
dans l'une des vues de conteneur de collectionview, et je n'ai pas appelé
[super touchesEnded: withEvent:]
quand j'ai fini avec ma logique personnalisée dans touchesEnded
.
Après avoir ajouté le super appel, tout va bien.
J'ai rencontré ce problème lorsque la vue de défilement occupait toute la cellule de la vue de collection. Alors que toutes les solutions ci-dessus fonctionnent probablement bien, je suis venu avec ma propre solution de travail élégante. Je mets une étiquette 'select' sous ma vue de défilement. Comme l'étiquette ne fait pas partie de la vue de défilement, elle transmet l'événement tap à la vue de collection. Il sert également d'indicateur de Nice qu'une action est requise de l'utilisateur.