在子视图控制器中显示导航栏

时间:2014-04-08 11:12:12

标签: ios uinavigationcontroller uinavigationbar childviewcontroller splitview

我正在开发一个应用程序,我必须并排显示多个视图控制器(拆分视图)。为此,我将视图添加为子视图控制器。

目标:我想在一个子视图控制器上显示导航栏,并在父视图控制器上显示单独的导航栏。

问题:导航栏未显示在子视图控制器上。

编辑:我还将父视图控制器的导航栏设置为隐藏,但是当调用子视图控制器时,导航栏会出现在父视图控制器上,而不是子视图控制器上。

添加子视图控制器的代码是:

    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];

此代码工作正常,子视图控制器完美添加。我想知道是否有可能?

提前致谢。

4 个答案:

答案 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)

像这样添加导航栏

enter image description here

它将出现在您的所有视图控制器

另一种方法:

将此代码放入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我们需要手动添加导航栏,没有替代方案。