私の問題:EditView基本的にアプリケーションフレーム全体を占めるスーパービューとMenuView、下部〜20%だけを占めるMenuViewサブビューがButtonViewあり、実際にはMenuViewの境界外にある独自のサブビューが含まれています(このようなもの:)ButtonView.frame.origin.y = -100。
(注:のビュー階層のEditView一部ではない他のサブビューMenuViewがありますが、回答に影響する可能性があります。)
あなたはおそらくすでに問題を知っています:ButtonViewがの範囲内にある場合MenuView(または、より具体的には、私のタッチがの範囲内にある場合MenuView)ButtonViewは、タッチイベントに応答します。タッチがMenuViewの範囲外(ただしButtonViewの範囲内)にある場合、はタッチイベントを受け取りませんButtonView。
例:
- (E)is
EditView、すべてのビューの親 - (M)is
MenuView、EditViewのサブビュー - (B)is
ButtonView、MenuViewのサブビュー
図:
+------------------------------+
|E |
| |
| |
| |
| |
|+-----+ |
||B | |
|+-----+ |
|+----------------------------+|
||M ||
|| ||
|+----------------------------+|
+------------------------------+
(B)は(M)のフレームの外にあるため、(B)領域のタップは(M)に送信されません-実際、(M)はこの場合タッチを分析せず、タッチは階層内の次のオブジェクト。
目標:オーバーライドhitTest:withEvent:することでこの問題を解決できることを確認しましたが、正確な方法がわかりません。私の場合、(私の「マスター」スーパービュー)hitTest:withEvent:でオーバーライドする必要がありEditViewますか?またはそれをオーバーライドする必要がありますMenuView、タッチを受け取らないボタンの直接のスーパービューでがありますか?それとも私はこれについて間違って考えていますか?
これに長い説明が必要な場合は、優れたオンラインリソースが役立ちます。ただし、AppleのUIViewのドキュメントは例外で、私には明確にされていません。
ありがとう!