我有3个视图控制器:
1)登录视图控制器。
2)主视图控制器。
3)注销视图控制器。
我正在使用NSUserDefaults存储从LoginViewController登录时的用户名。
然后在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 to LoginViewController,这意味着我有一个logout按钮,我使用了unwind segue to LoginViewController。当应用程序从LoginViewController启动而不是从MainViewController启动时,这种方法很好。
但是,无论是从LoginViewController还是MainViewController启动并从内存中释放所有其他viewcontroller,我都希望在按下注销按钮时转到LoginViewController。怎么可能?

最佳答案

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

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

关于swift - 根 View Controller 和缓和因素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37158637/

10-12 13:37