如何在Swift中调用现有的navigationcontroller

use*_*042 1 uiviewcontroller uinavigationcontroller swift

我的故事板中有3个项目.1. viewController(A)连接到2.导航控制器和3. viewController(B)没有连接任何东西所有3个项目都在故事板中设置了恢复标识符.

viewController(B)是初始视图控制器.我在B中尝试获取附加A的导航控制器,但总是返回nil:

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyBoard.instantiateViewControllerWithIdentifier("viewControllerA") as! ViewControllerA
print(vc.navigationController?) // always prints nil
Run Code Online (Sandbox Code Playgroud)

为什么!?

更新#1 我不能像视图控制器一样声明UINavigationController.我已经尝试将id为'myNavigationController'的navigationcontroller设置为storyboardID:

当故事板,我得到这个错误

let navigationController = storyBoard.instantiateViewControllerWithIdentifier("myNavigationController") as! UINavigationController
print(self.navigationController!) // fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)

我也尝试在恢复标识符中设置id,它早先在实例化的行中被轰炸了

@ColdLogic,看看我在整个项目中搜索该标识符时得到的匹配:

在此输入图像描述

Col*_*gic 5

因为您从未实例化导航控制器,所以您实例化了视图控制器A.如果您希望设置导航控制器和视图控制器,就像它们在故事板中一样,您会想要这样的东西

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
let navigationController = storyBoard.instantiateViewControllerWithIdentifier("YourNavControllerIdentifier") as! UINavigationController
let vc = navigationController.topViewController as! ViewControllerA
Run Code Online (Sandbox Code Playgroud)

您的代码直接实例化ViewControllerA类型的对象.除非您设置逻辑,否则默认情况下没有导航控制器.