如何在Swift中调用现有navigationcontroller

如何在Swift中调用现有navigationcontroller,swift,uiviewcontroller,uinavigationcontroller,Swift,Uiviewcontroller,Uinavigationcontroller,我的故事板中有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.instantiateV

我的故事板中有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
为什么

更新#1 我不能像视图控制器那样声明UINavigationController。我已尝试将id为“myNavigationController”的navigationcontroller设置为故事板id:

当情节提要时,我得到了这个错误

let navigationController = storyBoard.instantiateViewControllerWithIdentifier("myNavigationController") as! UINavigationController
print(self.navigationController!) // fatal error: unexpectedly found nil while unwrapping an Optional value
我还尝试过在restoration identifier中设置id,它在前面的实例化行中失败了

@ColdLogic,查看在整个项目中搜索该标识符时得到的结果:


使用
NavigationController
标识符访问
NavigationController
,并且ViewController A已连接到它,因此,它将自动加载到
NavigationController
使用
NavigationController
标识符访问
NavigationController
,并且ViewController A已连接到它,因此,它将自动加载到
导航控制器

,因为您从未实例化导航控制器,而是实例化了视图控制器A。如果您希望导航控制器和视图控制器都像在故事板中一样进行设置,则需要类似的设置

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

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

因为您从未实例化导航控制器,所以您实例化了视图控制器a。如果您希望导航控制器和视图控制器都像在故事板中一样进行设置,您可能需要这样的设置

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
let navigationController = storyBoard.instantiateViewControllerWithIdentifier("YourNavControllerIdentifier") as! UINavigationController
let vc = navigationController.topViewController as! ViewControllerA
您的代码直接实例化ViewControllerA类型的对象。除非您设置了逻辑,否则默认情况下没有导航控制器。

这对我很有用

    let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationController = storyBoard.instantiateViewController(withIdentifier: "HomeNavigationContoller") as! UINavigationController

    let viewController = storyBoard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
    navigationController.pushViewController(messageVC, animated: true)

    self.present(navigationController, animated: true, completion: nil)
这对我有用

    let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationController = storyBoard.instantiateViewController(withIdentifier: "HomeNavigationContoller") as! UINavigationController

    let viewController = storyBoard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
    navigationController.pushViewController(messageVC, animated: true)

    self.present(navigationController, animated: true, completion: nil)

我可能错了,但实际上您正在实例化视图控制器,而视图控制器并没有实例化其父导航控制器。您需要单独实例化导航控制器,然后将视图控制器添加为子级。您是否确定在故事板中将ViewController a命名为
viewControllerA
?我可能错了,但您实际实例化的是视图控制器,而视图控制器并未实例化其父级导航控制器。您需要单独实例化导航控制器,然后将视图控制器添加为子级。您确定在故事板中将ViewController a命名为
viewControllerA
?我不能像您所说的那样实例化导航控制器。查看我的更新情节提要标识符不是myNavigationController。仔细检查您是否使用了正确的脚本标识符来实例化导航控制器。抱歉,没有仔细阅读您的更新。
self.
是零的原因。请尝试
println(导航控制器)
。无论您在何处运行此代码,都没有
navigationController
对象。但是这个
println
将打印您刚刚从故事板创建的一个。我不能像您所说的那样实例化导航控制器。查看我的更新情节提要标识符不是myNavigationController。仔细检查您是否使用了正确的脚本标识符来实例化导航控制器。抱歉,没有仔细阅读您的更新。
self.
是零的原因。请尝试
println(导航控制器)
。无论您在何处运行此代码,都没有
navigationController
对象。但是这个
println
将打印您刚刚从故事板创建的一个。它表明代码找不到NavigationController的ID。我已经试过多次了。检查我的更新。似乎代码找不到NavigationController的ID。我已经试过多次了。检查我的更新。谢谢分享!对我工作!谢谢分享!对我工作!