web-dev-qa-db-fra.com

UICollectionView didSelectItemAtIndexPath non appelé lorsque tapoté sur UITextView

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?

12
imas145

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é.

4
Roma-MT

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.

23
santhu

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.

2
frankli

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.

0
Justin Domnitz