2016-10-30 71 views
0

我的登录屏幕嵌入在UINavigationController中,我的主页屏幕嵌入UITabBarController如何检查用户是否已登录,是否不重定向到登录屏幕

我的登录页面以编程方式完成,TabBarController使用storyboards创建。在AppDelegate.swift文件中,我制作了登录屏幕rootViewController

但现在我要检查,如果用户登录,使TabBarControllerrootViewController,如果用户没有登录,重定向到登录界面,然后Segue公司的TabBarController,并使其成为rootViewController

服务器通过向客户端发送令牌来认证用户。我是否使用NSUserDefaults存储令牌?我应该检查用户是否有_token _作为验证用户是否登录的方法?

+0

这是常用于验证用户是否已登录的方式。就像在Web开发中使用Cookie一样。 – Adeel

+0

@Adeel我做每个UIVewController类中的viewWillAppear中的支票,还有我在第一次打电话时AppDelegate中的支票? – user3497437

+0

不,不在_viewWillAppear_中,实际上不在任何视图控制器中。您需要检查_AppDelegate_的_didFinishLanchingWithOption_方法中的标记。 – Adeel

回答

2

因为要创建您的LoginViewController编程,所以我假定TabBarController将是storyboard默认的rootViewController。你所需要做的就是在你的AppDelegate这是。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 

    let token = UserDefaults.standard.object(forKey: "token") 
    if token == nil { 
     //*************** 
     //Create your LoginViewController and make it the rootViewController 
     //*************** 
    } 
    return true 
} 

注意:我使用的是Swift 3,所以在语法上会有细微差别。

+0

还要感谢当用户从登录屏幕上签名时,我是否应该关闭登录屏幕控制器并启动tabview控制器作为rootview控制器 – user3497437

+0

是的。你只需要''实例化'TabBarController'并将其设置为应用程序关键窗口的'rootViewController'。请记住,切勿将“TabBarController”推送到另一个“ViewController”。 – Adeel

+0

谢谢。所以我解雇了导航控制器,并将rootviewcontroller设置为标签控制器 – user3497437