如何在实例化后推送导航控制器

时间:2017-07-18 11:44:44

标签: ios swift uitableview swift3 uinavigationcontroller

我想推送我的导航控制器,但我得到:
pushing a navigation controller is not supported

enter image description here

我无法实例化我的TableView。

这是我的代码:

let newViewController = storyboard!.instantiateViewController(withIdentifier: "player") as! UINavigationController
self.navigationController?.pushViewController(newViewController, animated: true)

所以有一种推送NavigationController的方法吗?

2 个答案:

答案 0 :(得分:1)

这里我们可以看到第一行意味着是提供向下钻取的视图控制器堆栈,所以你必须在堆栈中推送最少的一个UIViewController对象或者使堆栈的根目录为导航控制器的任何视图控制器。

来自Apple文档。

  

导航控制器管理要提供的一组视图控制器   用于分层内容的深入分析界面。视图层次结构   导航控制器是自包含的。它由景观组成   导航控制器直接管理和视图   由您提供的内容视图控制器管理。每个内容视图   controller管理不同的视图层次结构和导航   控制器协调这些视图层次结构之间的导航。

阅读this

答案 1 :(得分:0)

将tableVC设置为导航控制器的根视图控制器:

let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var tableViewController = mainStoryboard.instantiateViewControllerWithIdentifier("TableViewController") as! HomeViewController
let navigationVC = UINavigationController(rootViewController: tableViewController)
appdelegate.window!.rootViewController = navigationVC

现在在TableViewController中,隐藏导航栏

    self.navigationController?.setNavigationBarHidden(true, animated: false)

然后你可以像你提到的那样推送另一个视图控制器

let newViewController = storyboard!.instantiateViewController(withIdentifier: "player") as! UINavigationController
self.navigationController?.pushViewController(newViewController, animated: true)