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