在视图内创建导航控制器

Posted

技术标签:

【中文标题】在视图内创建导航控制器【英文标题】:Create Navigation Controller inside view 【发布时间】:2016-04-30 10:49:57 【问题描述】:

我有 ViewController ma​​inVC - 它由两部分组成 - 导航视图和包装器视图。当用户按下 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。 不,不应该是这样的。我正在相应地更新我的答案。

以上是关于在视图内创建导航控制器的主要内容,如果未能解决你的问题,请参考以下文章

1个单一导航控制器内的不同导航栏颜色?

导航控制器内的标签栏控制器,或共享导航根视图

导航控制器内的表格视图中未调用 textFieldDidEndEditing

UITabBarController 内视图控制器的不同导航栏按钮/标题

以编程方式导航到另一个故事板上的导航控制器和标签栏控制器内的视图控制器

如何将参数传递给导航控制器内的弹出视图控制器