如果用户已登录,我的应用程序具有以下流程
Loading Screen -----> Main Screen -----> Rest of App
和以下流程:
Loading Screen -----> Login Screen -----> Main Screen -----> Rest of App
现在我正在实施Logout功能。我已将以下代码添加到main Screen
:
func handleLogout() {
if self.presentingViewController != nil {
var vc = self.presentingViewController
while ((vc!.presentingViewController) != nil) {
vc = vc!.presentingViewController
}
vc?.dismissViewControllerAnimated(true, completion: {
})
}
}
当1st
路径跟随(用户在启动应用时登录),当应用返回Loading Screen
然后加载时,此方法正常预期的Login Screen
。但是,如果遵循2nd
路径(用户在启动应用时未登录,并且已使用Login Screen
)此代码会导致{{1直接打开,整个注销过程失败。有没有办法可以确保Login Screen
是始终由此代码加载的Loading Screen
,无论两条路径中的哪条路径都被跟踪过。
答案 0 :(得分:1)
使用展开segues!
你基本上添加一个unwind segue连接你的"主屏幕"和"登录屏幕"。给它一个标识符,你可以随时启动segue。在handleLogout
:
func handleLogout() {
self.performSegueWithIdentifier("your identifier", sender: self)
}
有关如何创建展开segue的详细信息:https://www.andrewcbancroft.com/2015/12/18/working-with-unwind-segues-programmatically-in-swift/
答案 1 :(得分:0)
这只是一个建议:
在AppDelegate
文件中,您可以执行与此类似的操作:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//Implement this method
let userLoggedIn = isUserLoggedIn();
if !userLoggedIn {
let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
//Instantiate the login view controller
window?.rootViewController = storyboard.instantiateViewControllerWithIdentifier("login")
window?.makeKeyAndVisible()
}
return true
}
现在,当应用程序启动时,它将首先检查用户的登录状态并显示相应的视图。
注意:这是假设您使用故事板并且根视图控制器设置为Main Screen
答案 2 :(得分:0)
如果您使用的是Storyboard,我建议您创建纯粹用于登录视图的故事板。然后在AppDelegate DidFinishLoading方法中,如果他们需要登录或显示主故事板(如果他们已经登录),则可以显示登录故事板。您可以随时更换故事板并且易于操作。这将有助于简化流程。这是我通常在我的应用程序中执行的操作。如果您需要示例代码,请告诉我。