在导航控制器中嵌入子视图
Posted
技术标签:
【中文标题】在导航控制器中嵌入子视图【英文标题】:embedding subview in navigation controller 【发布时间】:2014-01-29 16:25:07 【问题描述】:这是我在 *** 上的第一篇文章。我是 ios 开发的新手,我搜索并尝试了很多(两天多),但我真的坚持做应该非常简单的东西。
我有一个主视图(全尺寸 iPhone 视图)。在该视图中,我想要一个较小尺寸的子视图(例如 290 x 400)。此子视图必须嵌入到导航控制器中。换句话说:我想在这个子视图的顶部有一个工作导航栏。
我使用容器视图在 Storyboards 中构建了它。那里没问题。但是,我只想在代码中执行此操作。我成功地用代码制作了一个基于导航控制器的应用程序。我还成功地编写了一个带有子视图控制器的应用程序。问题似乎是结合了这些。
当我尝试在其中一个子视图控制器中加载导航控制器时,应用程序崩溃并说 SubView 视图控制器必须将 Container 视图控制器作为父级,但它现在将 UINavigationcontroller 作为父级。
之后我尝试直接在子视图中加载导航控制器,如下所示:
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】:你做错了几件事。首先,您不需要设置导航控制器的视图,这已经通过使用根视图控制器实例化它来完成。其次,您应该将 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];
【讨论】:
rdelmar,你是今天的英雄。非常感谢你。像魅力一样工作。以上是关于在导航控制器中嵌入子视图的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中使 NavigationBar 子视图可点击