navigationController 在 swift 中为零

Posted

技术标签:

【中文标题】navigationController 在 swift 中为零【英文标题】:navigationController is nil in swift 【发布时间】:2016-08-12 09:01:43 【问题描述】:

我有两个故事板(主要和 SB2)

我在 Main 的情节提要中有一个视图控制器,在 SB2 中有一个 我执行

let SB2 = UIStoryboard(name: "SB2", bundle:nil)
let vc : UIViewController = self.SB2.instantiateViewControllerWithIdentifier("VC2")
self.showViewController(vc, sender: self)

在第二个视图控制器加载并运行此命令后,它会打印 nil:

print(self.navigationController) // prints nil

在 SB2(第二个故事板)中,我单击了 viewcontroller (VC2),然后单击了 Editor > Embed In > Navigation Controller。这放置了一个带有故事板的导航控制器,根视图控制器是 VC2。我三重检查了这一点。连接的第一个迹象是顶部的灰色导航栏。第二个是将导航控制器连接到 VC2 的 segue,我可以检查的最后一个地方是导航控制器实用程序。

我在想,也许我不应该直接从 VC1 过渡到 VC2,而是应该从 VC1 过渡到 NavigationController,但是我不知道如何做到这一点,甚至不知道它是否可能。

我不知道什么时候 sb2 打印 nil 时面对一个导航控制器连接到它。任何帮助表示赞赏。

【问题讨论】:

你需要在storyboard中给导航控制器一个标识符,然后实例化that而不是VC2。 问题解决了。我不敢相信我花了三个小时。我所要做的就是让 nvc : UINavigationController = self.SB2.instantiateViewControllerWithIdentifier("NVC") as! UINavigationController 非常感谢! 【参考方案1】:

您需要将视图控制器 (VC2) 推送到导航控制器。

let SB2 = UIStoryboard(name: "SB2", bundle:nil)v
let nvc = SB2.instantiateViewControllerWithIdentifier("NVC") as! UINavigationController
let vc : UIViewController = self.SB2.instantiateViewControllerWithIdentifier("VC2")
nvc.pushViewController(vc, animated: true)

然后在您的视图控制器中尝试调用

self.navigationController

【讨论】:

【参考方案2】:

在你的故事板中, 选择初始 ViewController。选择此视图控制器后,选择菜单项

Editor -> Embed In -> Navigation Controller

【讨论】:

以上是关于navigationController 在 swift 中为零的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 比 NavigationController 大

如何将 NavigationController 保持在 subViewController 方向?

在呈现的 ViewController/NavigationController 上获取 UITabBarController

无法推送 viewController,因为 navigationController 为 nil

在 TabBarController 项中有一个 NavigationController

在 iOS 上的 navigationController 推送上更改 contentSizeForViewInPopover