以编程方式创建不是rootViewController的UINavigationController

时间:2018-10-21 16:17:12

标签: ios swift uinavigationcontroller

我知道您可以这样做:

let foo = MyView()
let nav = UINavigationController(rootViewController: foo)

window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = nav

window?.makeKeyAndVisible()

或者类似AppDelegate.swift中的内容,并启动并运行导航控制器。但是,如果我的目标导航控制器不是 我的rootViewController怎么办?我会做这样的事情还是有完全不同的方法?

1 个答案:

答案 0 :(得分:0)

由于UINavigationController只是UIViewController的子类,我相信 only 其他仅代码的方法是使其成为您 actual的子视图控制器根控制器:

let navController = UINavigationController(nibName: nil, bundle: nil)

addChild(navController)
view.addSubview(navController.view)
navController.didMove(toParent: self)

该代码用于您的“根” UIViewController that will contain navController`。

我的用法略有不同。实际上,我在一个视图控制器中有*两个自定义/子类化的导航控制器 ,并且我使用自动布局将它们放置在需要的位置。您的需求在细节上非常含糊,但是如果您不想让nav控制器成为root用户,那么我看不出为什么您不能让一个人成为root的孩子并且让它全屏显示。 (您甚至应该可以present

如果我的代码不足以帮助您,请告诉我,我将继续进行介绍。

如果要使用情节提要,还有另一个选择:创建一个新的情节提要,将其中的所有内容嵌入到导航控制器中,然后将其打开。

let storyboard = UIStoryboard(name: "mySecondStoryboard", bundle: nil)
let vc = storyboardCompose.instantiateViewController(withIdentifier: "myRootVC") as! MyNextViewController
let navController = UINavigationController(rootViewController: myRootVC)
self.present(navController, animated:true, completion: nil)

但是请注意,您正在同时展示一个视图控制器 和,使其成为根!

请记住,UINavigationController只是一个子类的“容器” UIViewController,具有对导航(例如推/弹出)的一些增强。