Swift中的iOS登录/注销实现

SB2*_*015 4 iphone ios swift

我一直在尝试在swift中为iOS应用程序实现登录/注销流程.这是我的故事板 -

主要故事板

在主视图控制器(蓝屏)中,我实现了以下代码来检测用户是否已经登录,然后自动将它们带到表视图控制器 -

override func viewDidAppear(animated:Bool){

    if PFUser.currentUser() != nil {

       self.performSegueWithIdentifier("test", sender: self)

    }
Run Code Online (Sandbox Code Playgroud)

问题是,当我通过其中一个绿色屏幕登录或登录时,表格视图导航栏显示不同.当用户打开应用程序并且已登录时,"注销"按钮会正确显示,但是,通过绿色屏幕登录或登录,导航栏包含"<返回"按钮.

有人可以解释如何在故事板中以及在Swift中以编程方式实现登录/注销流程.我已经看到了一些Objective-C示例,但似乎无法在Swift中找到一个.如果有人有一个很好的例子,那将非常有帮助.

Abh*_*rai 8

Swift 4 在LoginViewController的登录按钮操作中

@IBAction func abtn_login(_ sender: Any) {

        let appDel:AppDelegate = UIApplication.shared.delegate as! AppDelegate
        let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        let centerVC = mainStoryBoard.instantiateViewController(withIdentifier: "InitialScreenTabBarController") as! InitialScreenTabBarController

        // setting the login status to true
        UserDefaults.standard.set(true, forKey: "isUserLoggedIn")
        UserDefaults.standard.synchronize()
        appDel.window!.rootViewController = centerVC
        appDel.window!.makeKeyAndVisible()


}
Run Code Online (Sandbox Code Playgroud)

根据您的方案验证登录.

在具有注销按钮的View Controller中.

@IBAction func abtn_logout(_ sender: Any) {

    UserDefaults.standard.set(false, forKey: "isUserLoggedIn")
    UserDefaults.standard.synchronize()

    let loginVC = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController

    let appDel:AppDelegate = UIApplication.shared.delegate as! AppDelegate

    appDel.window?.rootViewController = loginVC

}
Run Code Online (Sandbox Code Playgroud)

AppDelegate中,didFinishLaunchingWithOptions

let userLoginStatus = UserDefaults.standard.bool(forKey: "isUserLoggedIn")

    if(userLoginStatus)
    {
        let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let centerVC = mainStoryBoard.instantiateViewController(withIdentifier: "InitialScreenTabBarController") as! InitialScreenTabBarController
        window!.rootViewController = centerVC
        window!.makeKeyAndVisible()
    }
Run Code Online (Sandbox Code Playgroud)


kei*_*ter 6

< Back出现该按钮是因为您正在执行从登录视图控制器到选项卡栏控制器的 push segue。应用程序的更好流程是将标签栏控制器作为您的初始视图控制器。然后,在它的viewDidAppear方法中,检查用户是否已登录。如果用户未登录,则以模态方式将动画转至您的登录视图控制器。这一切都会在用户没有注意到的情况下发生,并允许你想要的故事板设置