在导航控制器中嵌入子视图

时间:2014-01-29 16:25:07

标签: ios iphone view uinavigationcontroller containers

这是我在Stackoverflow上的第一篇文章。我是iOS开发的新手,我搜索并尝试了很多(超过两天),但我真的很难做到一些非常简单的事情。

我有一个主视图(全尺寸iPhone视图)。在该视图中,我想要一个较小尺寸的子视图(例如290 x 400)。此子视图必须嵌入导航控制器中。换句话说:我想在这个子视图的顶部有一个工作导航栏。

我使用容器视图在Storyboards中构建了它。没问题。但是,我想只在代码中执行此操作。我成功地在代码中创建了一个基于导航控制器的app我还成功编写了一个带有子视图控制器的应用程序。问题似乎是将这些问题结合起来。

当我尝试在其中一个子视图控制器中加载navigationcontroller时,应用程序崩溃并说SubView视图控制器必须将Container视图控制器作为父视图,但它现在将UINavigationcontroller作为父视图。

之后我尝试直接在子视图中加载navigationcontroller,如下所示:

SubViewVC *subviewcontroller = [[SubVC alloc] initWithNibName:@"SubVC" bundle:nil];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:subviewcontroller];

[navController setView:subviewcontroller.view];

[self.view addSubview:subviewcontroller.view];

然而,现在我遇到一个崩溃,说一个视图一次只能与一个控制器相关联。子视图与SubViewVC相关联。必须先将其清除,然后再将其与UINavigationcontroller关联。

我理解这个问题,但不知道如何解决它。任何帮助深表感谢。

1 个答案:

答案 0 :(得分:6)

你做错了几件事。首先,您不需要通过使用根视图控制器实例化设置已经完成的导航控制器视图。其次,您应该将navController的视图添加到视图中,而不是subviewcontroller的视图。您还应该将navController添加为子项,并设置其视图的框架。像这样:

- (void)viewDidLoad {
    [super viewDidLoad];
    SubViewVC *subviewcontroller = [[SubViewVC alloc] initWithNibName:@"SubViewVC" bundle:nil];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:subviewcontroller];
    [self addChildViewController:nav];
    [nav didMoveToParentViewController:self];
    nav.view.frame = CGRectMake(15, 20, 290, 400);
    [self.view addSubview:nav.view];
}