在Swift 3中,UINavigationController为空

3
在我的主故事板中,我有一个导航控制器和相应的Swift文件NavigationCtr.swift。
视图控制器在不同的xib中。
现在我想从NavigationCtr类推送我的视图控制器。
       let vcFirst = FirstViewController(nibName: "FirstViewController", bundle: nil)
    self.navigationController!.pushViewController(vcFirst, animated: true)

我遇到了一个异常。

致命错误: 在解包可选值时意外发现了 nil。

因此,当我尝试从viewDidLoad中打印输出时出现了这个错误。

   print(self.navigationController)

在 NavigationCtr.swift 类中,它返回 nil。所以没有任何效果。


我用 Objective-C 创建了一个新项目,它运行良好。附上 Storyboard 图像。

非常感谢任何直接方向的提示。

enter image description here


请展示一下你在代码中如何从“NavigationCtr”推送你的ViewController。 - tek3
在您的图像中,仅显示了NavigationCtr ViewController,并将其设置为入口点。因此,看起来您尚未添加NavigationController。您需要选择ViewController,选择编辑->嵌入式->导航控制器。 - totiDev
从故事板中,我已经删除了ViewController并添加了一个navigationController。因此,主要的故事板将只有navigationController,而ViewCtr将在不同的xib文件中。 - Ekra
为什么故事板只有导航控制器?按照@totiG所说的做:在故事板中创建一个视图控制器,选择它,然后点击编辑器->嵌入->导航控制器。 - Leo
2个回答

1
主要问题是使用self.navigationController。
由于我的storyboard只有navigationController,所以我应该使用self关键字,如下所示。
let vcFirst = FirstViewController(nibName: "FirstViewController", bundle: nil)
self.pushViewController(vcFirst, animated: true)

-3

对于第一个控制器,将其设置为rootController而不是push(show)。

self.navigationController = UINavigationController(rootViewController: vcFirst)

或者设置其视图控制器

self.navigationController = UINavigationController()
navigationController.setViewControllers([vcfirst], animated: true)

5
self.navigationController 是只读属性,@property(nullable, nonatomic,readonly,strong) UINavigationController *navigationController;。 - Ekra
是的,实际上你不能像那样设置导航控制器。 - eemrah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接