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

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

这段代码没有问题,子视图控制器被成功添加。我想知道是否可能实现这一点?事先感谢。

你可以为这个子视图控制器手动添加导航栏吗? - Thukaram
我正在通过代码在子视图控制器中添加导航栏。但是,任何添加到导航栏的内容都不会显示/添加。 - Salman Zaidi
我可以在子视图控制器中创建一个类似导航栏的视图,但那只是我的最后选择。现在我正在寻找一个具体的解决方案。 - Salman Zaidi
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属性,两者都有各自的导航堆栈。


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文件。
单击文件所有者左侧的黄色框。通过简单拖动控制关键字连接视图,在弹出窗口中单击视图。
现在转到身份检查器(从左侧开始的第四个部分)。
在类名称文本框中写入您的类名称。
通过这种方法,您可以在 iOS7 中打开 xib,如果您不想使用 storyboard。
现在,如果您需要一个带有导航控制器的视图控制器。
然后按照这种方式打开您的视图控制器。
 ECViewController1 *v = [[ECViewController1 alloc]initWithNibName:@"ECViewController1" bundle:nil];

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

这篇已经编辑过的回答可能有点晚了,但希望它能对其他人有所帮助。


我没有使用故事板。而在使用nib文件时,此选项是禁用的。 - Salman Zaidi
也许你没有理解我的问题.. 我想在子视图控制器中显示导航栏,同时父视图控制器也显示导航栏.. 即屏幕上同时有两个导航栏,使用不同的导航控制器和堆栈.. 我正在使用分割视图。无论如何,非常感谢你的努力。我通过一些逻辑处理了这个问题.. 我已经回答了自己的问题。你可以看到.. :-) - Salman Zaidi
没关系,我以为你需要在所有视图控制器中添加导航栏:P,所以我根据这个回答了。谢谢阅读我的回答。 - Gajendra Rawat

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

-1

我在stackoverflow上找到了链接,我们需要手动添加导航栏,没有其他替代方法。


在上述链接的帖子中,楼主询问如何访问父视图控制器的导航栏。但我并不想这样做。我想创建一个新的独立导航栏,仅在子视图控制器中显示。 - Salman Zaidi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接