如何将导航控制器添加到UIViewController,而不是初始的UIViewController

时间:2018-04-17 04:51:39

标签: swift swift4

好的,我希望这个问题的标题有意义。基本上,我有一个具有登录屏幕的应用程序,一旦您登录它将带您到另一个视图控制器。登录屏幕被设置为初始视图控制器,它没有导航控制器,因为除非他们退出,否则我不希望用户返回该屏幕。所以,我通过storyboard添加了一个导航控制器到我的mainViewController,这是登录后显示的控制器。虽然导航控制器没有出现。我不确定它是否与我呈现mainViewController的方式有关,但我会告诉你我的代码,我会让你成为法官!

StoryBoard Image

let pushedViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "mainViewController") as! mainViewController
self.present(pushedViewController, animated: true, completion: nil)

我从来没有在我的AppDelegate课程中添加任何额外的代码,所以我不确定我是否必须在那里做点什么?

2 个答案:

答案 0 :(得分:0)

您可以通过在UINavigationController中设置let pushedViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "mainViewController") as! mainViewController let vc = UINavigationController.init(rootViewController: pushedViewController) self.present(vc, animated: true, completion: nil)

来以编程方式执行此操作
" Driver "

答案 1 :(得分:0)

如果您从故事板中获取导航控制器,则导航控制器不是mainViewController

为此:

您可以将标识符指定给navigationController "mainViewControllerNav",然后将代码更新为:

let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "mainViewControllerNav")
self.present(vc, animated: true, completion: nil)

现在您将展示导航控制器,导航控制器将在堆栈中加载其第一个视图控制器,即"mainViewController"

<强>相反:

我建议您在登录时更改根目录并注销:

if let navVC = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "mainViewControllerNav") as? UINavigationController,
    let appDelegate = UIApplication.shared.delegate as? AppDelegate {
    appDelegate.window?.rootViewController = navVC
    appDelegate.window?.makeKeyAndVisible()
}

希望这会对你有所帮助。