在视图内创建导航控制器
Posted
技术标签:
【中文标题】在视图内创建导航控制器【英文标题】:Create Navigation Controller inside view 【发布时间】:2016-04-30 10:49:57 【问题描述】:我有 ViewController mainVC - 它由两部分组成 - 导航视图和包装器视图。当用户按下 NavigationView 中的按钮之一(我的 ViewController 之一)时,例如 vc 会在 WrapperView 中加载。
addChildViewController(vc)
//size adjustment
vc.view.frame = contentView.bounds
WrapperView.addSubview(vc.view)
我想知道是否可以将 NavigationController 放在 WrapperView 中 - 这样我的导航就会可见,并且用户仍然可以使用导航视图中的按钮更改视图。怎么做?
【问题讨论】:
【参考方案1】:是的。这是完全可能的。 UINavigationController 只是 UIViewController 的子类。
它的视图可以作为普通视图添加到任何视图层次结构中。所以你可以做的是将导航控制器添加到你的包装视图中,然后将后续的 ViewControllers 添加到 UINavigationController 中。
所以在你的情况下,你可以这样做:
let navController = UINavigationController(rootViewController:mainVC)
self.addChildViewController(navController)
navController.view.frame = contentView.bounds
contentView.addSubview(navController.view)
更多的视图控制器可以直接添加到你的navigationController然后
navController.showViewController(viewController2, sender: nil
注意:这里的 self 是包含你的 wrapperview 的 viewcontroller。
【讨论】:
你能告诉 - 从 WrapperView 中的 ViewController 打开另一个 ViewController 的最佳方法是什么? 假设您添加了。 Navigation Controller 作为 Wrapper 视图中的 viewController,并启动了它的 rootViewController,如我的回答中所述。现在你有了 mainVC,你需要从中打开另一个 ViewController,比如 VC2?您可以从 mainViewController 内部简单地调用 self.navigationController.showViewController(VC2, sender:nil)。 谢谢 - 这个方法在 ios 7 上无法运行的唯一问题 是的,对于 iOS7,还有另一种方法。 pushViewController,用它来代替 showViewController。【参考方案2】:是的,可以使用UIContainerView
。查看Apple's documentation了解更多详情。
您可以将容器视图作为您想要的大小(在您的情况下为 WrapperView 大小),您将通过特殊的自定义 segue 与您的视图控制器连接该大小的视图。
只需将 containerview
从情节提要拖放到您的 viewController 中,您就会得到更好的主意。
更新:
在您的 viewController 中添加 containerView。
选择显示在您的 VC 旁边的容器视图,该容器视图与 storyboard embed segue 连接。
来自编辑embed in navigation controller
现在将新的视图控制器拖到画布上,然后从容器视图控制器 ctrl + 拖动到新的 VC,您的新 VC 会根据您的容器视图的大小调整大小,当您推送它时,它会保持该大小
希望这会有所帮助:)
【讨论】:
我添加了 UIContainerView 而不是我的 WrapperView - 当我按下 NavigationView 中的按钮时 - UIContainerView 中的 ViewControllers 正在发生变化。但是当我点击嵌入到导航控制器中的 ViewControllers 上的一些按钮时 - 新的 ViewController 覆盖了所有屏幕,我看不到 NavigationView。 不,不应该是这样的。我正在相应地更新我的答案。以上是关于在视图内创建导航控制器的主要内容,如果未能解决你的问题,请参考以下文章
导航控制器内的表格视图中未调用 textFieldDidEndEditing
UITabBarController 内视图控制器的不同导航栏按钮/标题