7

親View Controllerに子View Controllerを追加するためにコンテナ船の概念を使用したiPhone用のサイドビューのようなメニューを作成しました。ユーザーがナビゲーションバーのメニューボタンをタップすると、子View Controllerのフレームを変更して、明らかにするメニューのようにアニメーション化し、子View Controllerがフレームの半分を右に切り取るようにします。

今私の問題は、ユーザーが子View Controllerの任意の部分をタップするたびに、子View Controllerでタッチイベントが発生したことを親View Controllerに通知して、親View Controllerが子View Controllerのフレームをリセットしてアニメーション化できるようにすることです半分明らかにされたメニューを閉じるように。

タップ ジェスチャを使用し、それを子ビュー コントローラ サブビューのすべての子ビューに追加しました。したがって、サブビューのいずれかでジェスチャをタップすると、タッチイベントについて親ビューコントローラーに通知されます。

タッチ イベントは、子ビュー コントローラーのメイン ビューでは正常に機能しますが、どのボタンをタッチしても TAP イベントが認識されません。

どこを間違えているのかわからない。子View Controllerのタッチについて親View Controllerに通知する方法を教えてください。前もって感謝します。

4

3 に答える 3

7

これを行うべきではありません

「タップ ジェスチャを使用し、それを子ビュー コントローラ サブビューのすべての子ビューに追加しました」

メニューを開いた後、parentviewcontroller のビューの上にオーバーレイ ビューを 1 つ追加する必要があります。そのため、左右のビューの上にとどまります。

オーバーレイビューを破棄/非表示にし、そこでメニュー非表示アニメーションを実行するには、タップ認識機能を追加する必要があります。以下のコードを参照してください

-(void)afterMenuOpened{

    UIViewController *parentViewController = yourParentViewController;

    UIView *aOverLayView = [[UIView alloc]initWithFrame:parentViewController.view.bounds];

    aOverLayView.backgroundColor = [UIColor clearColor];

    UITapGestureRecognizer *tapRecog = [[UITapGestureRecognizer alloc] initWithTarget:parentViewController action:@selector(OverLayDidTap:)];

    tapRecog.numberOfTapsRequired = 1;

    [aOverLayView addGestureRecognizer:tapRecog];

    [parentViewController.view addSubview:aOverLayView];


}

- (void)OverLayDidTap:(UITapGestureRecognizer*)sender {
//    sender.view.hidden = YES;
    NSLog(@"Hide Menu by resetting the menu frame");
}
于 2014-07-16T11:42:58.620 に答える
0

サブビューのボタンのタッチ イベントが見つからない場合は、ボタンのターゲットを追加してみてください。

[button addTarget:<#(id)#> action:<#(SEL)#> forControlEvents:UIControlEventTouchUpInside];

parentViewcontroller に通知するには、childViewController のセレクター関数から通知を投稿します。

[[NSNotificationCenter defaultCenter] postNotificationName:@"notificaiton_name" object:object_you_want_to_send];

そして、親View Controllerに NSNotificationCenter のオブザーバーを追加します

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(method_you_want_to_call:) name:@"notificaiton_name" object:nil];
于 2014-07-16T12:25:32.360 に答える