Swift &引用;“放松”;从任何视图控制器返回到情节提要';s初始视图控制器

Swift &引用;“放松”;从任何视图控制器返回到情节提要';s初始视图控制器,swift,storyboard,Swift,Storyboard,先决条件(Swift): 我有一个应用程序,在一个故事板上有许多视图控制器 有一个导航控制器,但前几个视图控制器不在其中。(我指出b/c我不能在这里“跳到根目录”。) x分钟后会触发“会话过期”事件 用例: 无论用户在哪个屏幕上,如果我看到“会话已过期”通知,我希望将用户发送回故事板的初始视图控制器 我的问题: 如果不在每个视图控制器上手动创建展开序列,我该如何实现这一点?是否有某种方法可以“抛弃”故事板的当前实例并从头开始 (我不担心记住他们的当前状态和其他情况……这与此场景无关。它过期了,他

先决条件(Swift):

  • 我有一个应用程序,在一个故事板上有许多视图控制器
  • 有一个导航控制器,但前几个视图控制器不在其中。(我指出b/c我不能在这里“跳到根目录”。)
  • x分钟后会触发“会话过期”事件
  • 用例:

    无论用户在哪个屏幕上,如果我看到“会话已过期”通知,我希望将用户发送回故事板的初始视图控制器

    我的问题:

    如果不在每个视图控制器上手动创建展开序列,我该如何实现这一点?是否有某种方法可以“抛弃”故事板的当前实例并从头开始


    (我不担心记住他们的当前状态和其他情况……这与此场景无关。它过期了,他们输了,他们重新开始。)

    最好的解决方案是使用故事板id导航到viewcontroller

    单击main.storyboard并单击viewcontroller。在标识检查器上,启用情节提要使用情节提要ID并为其提供ID

    let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let vc : UINavigationController = storyboard.instantiateViewControllerWithIdentifier("mainNavigationStoryBoard") as! UINavigationController
    self.presentViewController(vc, animated: true, completion: nil)
    
    在session过期后,只需使用上面的代码导航到特定的viewcontroller

    您就可以从故事板标识符中“抓取”相关的viewcontroller-正如Pawan Araballi在他的回答中所说-并在
    AppDelegate上设置
    窗口.rootViewController
    属性。 我认为这种方法比在已有的UI上显示viewController要好