web-dev-qa-db-ja.com

UICollectionView didSelectItemAtIndexPathは、UITextViewをタップしたときに呼び出されません

私はカスタムセルを備えたUICollectionViewを持っています-それらはほとんどセル全体をカバーするUITextViewを持っています。これは、didSelectItemAtIndexPathを使用するときに問題を引き起こします。トリガーする唯一の方法は、UITextViewの外側をタップすることです。テキストビューがあるかどうかに関係なく、セル内のどこをタップしてもトリガーされるようにします。これはどのように行うことができますか?

14
imas145

各セルにUIGestureRecognizerを使用し、それをテープでUITextViewなどに送信する場合は、おそらくより良い解決策があるかもしれませんが、単純さの理由からこれを使用します。

4
Roma-MT

didSelectItemAtIndexPathは、none of the subView of collectionViewCell respond to that touchのときに呼び出されます。 textViewはこれらのタッチに応答するため、superViewに対してwon't forward those touchesするため、collectionViewはそれを取得しません。

collectionViewCellまたはCollectionViewサブクラスのhitTest:withEventメソッドをオーバーライドし、常にそれらからselfを返すため、collectionViewをfirst responderとして明示的に作成します。

26
santhu

touchesEnded: withEvent:を上書きしますか?

今日も同じ問題が発生し、collectionviewのコンテナビューの1つでtouchesEndedにカスタマイズされたロジックがあることがわかりましたが、呼び出しませんでした

 [super touchesEnded: withEvent:]

touchesEndedでカスタマイズしたロジックを使い終わったら。

スーパーコールを追加した後、すべてが正常です。

2
frankli

UITextViewを選択し、その特定の場合はUICollectionViewCellを選択し、属性インスペクターに切り替えます。チェックを外すとユーザーインタラクションが有効になり、正常に機能するはずです。

1
Stefano Mtangoo

コレクションビューセル全体を占めるスクロールビューがあるときに、この問題が発生しました。上記のすべてのソリューションはおそらく正常に機能しますが、私は独自のエレガントな回避策を考え出しました。スクロールビューの下に「選択」ラベルを付けました。ラベルはスクロールビューの一部ではないため、tapイベントをコレクションビューに渡します。また、ユーザーにアクションが必要であることを示す優れたインジケーターとしても機能します。

0
Justin Domnitz