私の問題:EditView基本的にアプリケーションフレーム全体を占めるスーパービューとMenuView、下部の約20%のみを占めるサブビューがあり、実際には範囲外にあるMenuView独自のサブビューが含まれています(次のようなものです)。ButtonViewMenuViewButtonView.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ドキュメントは、私にはわかりません。
ありがとう!