我正在开发一个应用程序,我必须并排显示多个视图控制器(拆分视图)。为此,我将视图添加为子视图控制器。
目标:我想在一个子视图控制器上显示导航栏,并在父视图控制器上显示单独的导航栏。
问题:导航栏未显示在子视图控制器上。
编辑:我还将父视图控制器的导航栏设置为隐藏,但是当调用子视图控制器时,导航栏会出现在父视图控制器上,而不是子视图控制器上。
添加子视图控制器的代码是:
MyChildViewController *childViewController = [[MyChildViewController alloc] initWithNibName:@"MyChildViewController" bundle:nil];
[self addChildViewController:childViewController];
[childViewController.view setFrame:CGRectMake(0.0f, 0.0f, self.rightContainerView.frame.size.width, self.rightContainerView.frame.size.height)];
[self.rightContainerView addSubview:childViewController.view];
[childViewController didMoveToParentViewController:self];
此代码工作正常,子视图控制器完美添加。我想知道是否有可能?
提前致谢。
答案 0 :(得分:8)
我通过以下方式解决了这个问题:
MyChildViewController *childViewController = [[MyChildViewController alloc] initWithNibName:@"MyChildViewController" bundle:nil];
[childViewController.view setFrame:CGRectMake(0.0f, 0.0f, self.rightContainerView.frame.size.width, self.rightContainerView.frame.size.height)];
UINavigationController *childNavController = [[UINavigationController alloc] initWithRootViewController:childViewController];
childNavController.view.frame = childViewController.view.frame;
[self addChildViewController:childNavController];
[self.rightContainerView addSubview:childNavController.view];
[childNavController didMoveToParentViewController:self];
现在,当我在MyChildViewController
中添加导航栏时,它会添加到子视图控制器中,不会影响父视图控制器的导航栏。子视图控制器的navigationController
属性也不同于父视图控制器的navigationController
属性,并且两者都有自己的导航堆栈。
答案 1 :(得分:3)
像这样添加导航栏
它将出现在您的所有视图控制器
中另一种方法:
将此代码放入appdelegate.m文件中的didFinishLaunchingWithOptions方法。
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
ECViewController * ec = [[ECViewController alloc] initWithNibName:@"ECViewController" bundle:nil];
UINavigationController* navigationController = [[UINavigationController alloc] initWithRootViewController:ec];
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
只需按照以下步骤添加Nib文件(ECViewController):
1:在项目根目录中右键单击
2:添加新文件
3:转到用户界面。
4:选择视图
5:给它的名称与你的视图控制器名称相同,我给出了ECViewController。
点击新创建的nib文件
点击左侧文件所有者拳头黄色框。当弹出窗口显示时,通过控制keyword.click在视图上简单拖动来建立与视图的连接。
现在转到身份检查员(第四部分从左侧开始)。
将您的班级名称写在班级名称textBox中。
如果你不想使用故事板,你可以在iOS7中打开一个xib。
现在,如果您需要带导航控制器的视图控制器。
然后以这种方式打开你的视图控制器。
ECViewController1 *v = [[ECViewController1 alloc]initWithNibName:@"ECViewController1" bundle:nil];
[self.navigationController pushViewController:v animated:YES];
对于这个编辑过的答案来说太迟了,希望它会帮助其他人。
答案 2 :(得分:1)
正确设置子视图的y位置。
MyChildViewController *childViewController = [[MyChildViewController alloc] initWithNibName:@"MyChildViewController" bundle:nil];
[self addChildViewController:childViewController];
[childViewController.view setFrame:CGRectMake(0.0f, 44.0f, self.rightContainerView.frame.size.width, self.rightContainerView.frame.size.height)];
[self.rightContainerView addSubview:childViewController.view];
[childViewController didMoveToParentViewController:self];
答案 3 :(得分:-1)
我从stackoverflow找到link我们需要手动添加导航栏,没有替代方案。