私はカスタムセルを備えたUICollectionView
を持っています-それらはほとんどセル全体をカバーするUITextView
を持っています。これは、didSelectItemAtIndexPath
を使用するときに問題を引き起こします。トリガーする唯一の方法は、UITextView
の外側をタップすることです。テキストビューがあるかどうかに関係なく、セル内のどこをタップしてもトリガーされるようにします。これはどのように行うことができますか?
各セルにUIGestureRecognizer
を使用し、それをテープでUITextView
などに送信する場合は、おそらくより良い解決策があるかもしれませんが、単純さの理由からこれを使用します。
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
として明示的に作成します。
touchesEnded: withEvent:
を上書きしますか?
今日も同じ問題が発生し、collectionviewのコンテナビューの1つでtouchesEnded
にカスタマイズされたロジックがあることがわかりましたが、呼び出しませんでした
[super touchesEnded: withEvent:]
touchesEnded
でカスタマイズしたロジックを使い終わったら。
スーパーコールを追加した後、すべてが正常です。
コレクションビューセル全体を占めるスクロールビューがあるときに、この問題が発生しました。上記のすべてのソリューションはおそらく正常に機能しますが、私は独自のエレガントな回避策を考え出しました。スクロールビューの下に「選択」ラベルを付けました。ラベルはスクロールビューの一部ではないため、tapイベントをコレクションビューに渡します。また、ユーザーにアクションが必要であることを示す優れたインジケーターとしても機能します。