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