質問

私は私を手に入れるのに苦労しています UIButtons, UIScrollViews この状況で働いているなど:

私は基地を持っています UIViewController, 、これはのルートコントローラーです UIWindow。そのレイヤーの上には、他にもあります UIViews 追加して、「中間層ビュー」と呼びます。そして、一番上に私は別のものがあります UIView オーバーレイオブジェクト用に追加されました。

ミドルレイヤービューは、さまざまなビューに対して定期的に変更されます。 UIView 使用するのはaからです UIViewController, 、ペンnibファイルによって作成されました。これが例です

if ( mode == eModeShowView1 )
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View1"...
else if ( mode == eModeShowView2 )
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View2"...

[UIView insertSubview:nextController.view below:m_overlayView];

今、私が画面上で触れると、最初のレスポンダーは明らかに OverlayView または何か UIResponderOverlayView それは触れられました。 UIEvent タッチ入力のビューチェーンが上がりますが、中間層ビューと UIResponders その上 UIView 全体的に。ルートにまっすぐジャンプします UIViewController.

ここで何が起こっているのか誰もが知っていますか?

どういうわけか2つを作成することで解決できますか UIEvents?オーバーレイビュー用、もう1つは中間層ビュー用ですか?それは可能ですか?もしそうなら、どうですか?

どんな助けも感謝します。ありがとう、リッチ

役に立ちましたか?

解決

edit1 start:

uitapgesturerecognizerをm_overlayviewとinitwithtargetに配置できます:あなたのミドルビューアクション:Method-in-middleview

MiddleViewでは、承認剤を識別することができます。

edit1 end:

デバッグできます。ログを使用するだけです touchesbegan すべてのコントローラーで。タッチ応答のシーケンスを記録することで明らかになります。

OK ..だからドキュメントからの方法の説明はあなたに答えるかもしれません。君の m_overlayViewnextController.view お互いを兄弟と見なしており、監督ではありません。したがって、それらのいずれかに対するあなたのタッチは、他のものに報告されるのではなく、代わりにベースに報告されます superview これは一般的です superview 両方の兄弟に。

したがって、あなたは中間層がバイパスされていることを得ています。実際、あなたの中間層は兄弟であり、もう監督ではありません。少なくともあなたに何らかの先を与えることを願っています;)

insertSubview:belowSubview:

ビュー階層の別のビューの下にビューを挿入します。

(void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview

パラメーター:

view

別のビューの下に挿入するビュー。それから削除されます superview 兄弟の兄弟ではない場合。

siblingsubview:

挿入されたビューの上にある兄弟ビュー。

討論:

この方法はビューを保持し、次のレスポンダーを受信機に設定します。 superview.

ビューには、1つのスーパーワークのみができます。ビューがすでにある場合 superview そして、そのビューは受信機ではありません、この方法は前のものを削除します superview 受信機を新しいものにする前に superview.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top