私の問題: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のドキュメントは例外で、私には明確にされていません。
ありがとう!