如何在ios中检测子视图控制器中的触摸事件

Dha*_*ena 7 iphone parentviewcontroller touch-event ios childviewcontroller

我已经为iPhone创建了一个侧视图菜单,我已经使用集装箱船概念在父视图控制器中添加子视图控制器.当用户点击导航栏上的菜单按钮时,我只需更改子视图控制器的框架,使其像一个显示菜单一样设置动画,以便子视图控制器将其框架的一半剪裁到右侧.

现在我的问题是每当用户点击子视图控制器的任何部分时我只想通知其父视图控制器触发事件​​已在其子视图控制器上触发,以便父视图控制器可以重置子视图控制器的帧以使其动画化喜欢关闭半显示菜单.

我使用了tap手势并将其添加到子视图控制器子视图的每个子视图中.因此,在任何子视图上点击手势都会通知父视图控制器有关触摸事件的信息.

触摸事件适用于子视图控制器的主视图,但任何按钮上的任何触摸都无法识别TAP事件.

我不知道我在哪里误会.请帮助我如何通知父视图控制器其子视图控制器中的任何触摸.提前致谢.

Vij*_*com 7

你不应该这样做

"我使用了tap手势并将其添加到子视图控制器子视图每个子视图中 "

打开菜单后,您应该在parentviewcontroller视图的顶部添加一个叠加视图.所以它将保持在左右视图的顶部.

你应该添加点击识别器来销毁/隐藏叠加视图,并在那里做菜单隐藏动画.请参阅以下代码

-(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");
}
Run Code Online (Sandbox Code Playgroud)