我正在制作示例项目以实现顶部菜单。
以下是项目结构。
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];