Root View Controller和unwind segues?

时间:2016-05-11 09:38:20

标签: swift ios9 xcode7 unwind-segue rootviewcontroller

我有3个视图控制器: 1)LoginViewController。 2)MainViewController。 3)LogoutViewController。

我从LoginViewController登录时使用NSUserDefaults存储用户名。

然后在AppDelegate中我使用这个方法:

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let UserData = NSUserDefaults.standardUserDefaults()
    if (UserData.stringForKey("Username") != nil) {
        let initialViewController = storyboard.instantiateViewControllerWithIdentifier("MainViewController") as! MainViewController
        self.window?.rootViewController = initialViewController
    } else {
        let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController
        self.window?.rootViewController = initialViewController
    }

因此,当NSUserDefaults中存储了用户名时,应用程序将跳转到主视图控制器并跳过应用程序启动时的第一个。

在LogoutViewController中的

我使用unwind segue到LoginViewController,这意味着我有一个注销按钮,我使用unwind segue转到LoginViewController。当应用程序从LoginViewController启动而不是从MainViewController启动时,它可以正常工作。

但是,我希望在Logout Button Pressed时转到LoginViewController,无论它是从LoginViewController还是MainViewController启动,并从内存中释放所有其他ViewControllers。怎么会这样?

2 个答案:

答案 0 :(得分:1)

您需要在注销时将LoginViewController设置为rootViewController,而不是展开segue。

let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController
UIApplication.sharedApplication().keyWindow?.rootViewController = initialViewController

答案 1 :(得分:0)

在你的情况下,在启动应用程序时首先调用以视图为基础的LoginViewController。因此,当您注销时,您应该弹出到根视图控制器