Swift:跳过导航控制器堆栈中的第一个(和更多)屏幕

时间:2016-06-25 17:20:46

标签: ios swift uinavigationcontroller

我的应用程序中有一个NavigationController。堆栈中的第一个屏幕是TermsConditionVC,然后是LoginVC,然后是MainVC。当我跑步时,它直接进入TermsConditionsVC。

但是,根据用户是否已同意条款条件和/或登录,我希望跳过TermsConditionsVC和/或LoginVC并直接进入MainVC。

在这种情况下我有多个导航控制器是没有意义的,但我不知道如何跳过屏幕(特别是导航控制器堆栈中的第一个屏幕?

1 个答案:

答案 0 :(得分:5)

在AppDelegate.swift文件的应用程序(didFinishLaunchingWithOptions)中...

首先,在代码中获取Storyboard文件:

let storyboard  = UIStoryboard(name: "your_storyboard_name_here", bundle: nil)

接下来获取 root ViewController。在您的情况下,它可能是UINavigationController。根控制器就是故事板文件中箭头所指向的内容

let root = storyboard.instantiateViewControllerWithIdentifier("root") as! UINavigationController

“root”是您在storyboard文件中实际需要命名的内容。所以转到“StoryboardName”.storyboard并单击UINavigationController。转到身份检查器(左起第三个选项卡)并输入故事板ID。当你在它的时候,为你要跳转到的视图输入一个Storyboard ID

第三

let destination = storyboard.instantiateViewControllerWithIdentifier("main_vc")

root.pushViewController(destination, animated: false)

您将动画设置为false,以便在跳转到该视图时没有默认动画节目。我很确定用户会说这个,看起来事情刚刚发生,没有他们按任何东西。它可能会把它们关掉

第五

self.window?.rootViewController = root

在此步骤中,将当前窗口设置为root。请记住,root是您刚刚推送MainVC ViewController的UINavigationController。如果你没有设置UINavigationController而你设置了MainVC ViewController,那么你将丢失导航栏。因此,请确保设置根(UINavigationController)而不是ViewController,以便您可以保留导航