4

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

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

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

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

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

    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

4 回答 4

11

我通过以下方式自己解决了这个问题:

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父视图控制器的属性,它们都有自己的导航堆栈。

于 2014-05-28T07:40:24.393 回答
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 文件

单击左侧的文件所有者拳头黄色框。通过简单的拖动控制关键字与视图建立连接。当弹出窗口出现时单击视图。

现在转到身份检查员(注视左侧的第四部分)。

在出现的 Class name 文本框中写下你的班级名称。

如果您不想使用情节提要,则可以通过这个在 iOS7 中打开 xib。

现在,如果您需要带有导航控制器的视图控制器。

然后通过这种方式打开您的视图控制器。

 ECViewController1 *v = [[ECViewController1 alloc]initWithNibName:@"ECViewController1" bundle:nil];

    [self.navigationController pushViewController:v animated:YES];

这个编辑过的答案为时已晚,希望它能对其他人有所帮助。

于 2014-04-08T11:17:15.483 回答
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];
于 2014-04-08T11:18:28.070 回答
-1

我从 stackoverflow 中找到了我们需要手动添加导航栏的链接,没有替代方法。

于 2014-04-08T11:54:14.650 回答