我知道您可以这样做:
let foo = MyView()
let nav = UINavigationController(rootViewController: foo)
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = nav
window?.makeKeyAndVisible()
或者类似AppDelegate.swift中的内容,并启动并运行导航控制器。但是,如果我的目标导航控制器不是 我的rootViewController怎么办?我会做这样的事情还是有完全不同的方法?
答案 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
,具有对导航(例如推/弹出)的一些增强。