我正在制作示例项目以实现顶部菜单。

以下是项目结构。



TopMenu是具有以下结构的父视图。



在TopViewController中,下面是viewDidLoad。

NSString *whereToGo = [[NSUserDefaults standardUserDefaults] valueForKey:@"whereToGo"]; // this is DarkGray by default
UIViewController *goToViewController;
goToViewController = [self.storyboard instantiateViewControllerWithIdentifier:whereToGo];
goToViewController.view.frame = bottomView.bounds;
// bottomView is the first view (will bring child here)
[bottomView addSubview:goToViewController.view];
[self addChildViewController:goToViewController];
[goToViewController didMoveToParentViewController:self];


现在,当我执行项目时,我看到了深灰色,但是当我单击Click Me按钮时,什么也没有发生(IBAction没有被调用)。

- (IBAction)clickme:(id)sender {
    NSLog(@"clickme==dark gray");
}


我期望的是,当我单击“单击我”时,我将在日志中看到clickme ==深灰色。

为什么会这样呢?

Sample project for download



回答

正如MidhunMP所说,简短的答案是

menuView隐藏了bottomView

实际上,对于menuView我有backgroundColor作为clearColor。而且我认为(这是错误的),因为menuView很清楚,触摸在menuView上将不起作用,而这些触摸将进入bottomView。

最佳答案

问题很简单,您要将goToViewController.view添加到bottomView

menuView位于bottomView的顶部,因此它隐藏了对goToViewController.view的触摸。您需要将goToViewController.view添加到最上面的视图(也称为menuView)中。

现在,您的视图层次结构就像:

bottomView -> goToViewController.view -> menuView


您需要将其更改为:

bottomView -> menuView -> goToViewController.view


将您的代码更改为以下内容并检查:

NSString *whereToGo = [[NSUserDefaults standardUserDefaults] valueForKey:@"whereToGo"]; // this is DarkGray by default
UIViewController *goToViewController;
goToViewController = [self.storyboard instantiateViewControllerWithIdentifier:whereToGo];
goToViewController.view.frame = menuView.bounds;
[menuView addSubview:goToViewController.view];
[self addChildViewController:goToViewController];
[goToViewController didMoveToParentViewController:self];

07-24 09:47