Swift: how to show a tab bar controller after a login view Swift: how to show a tab bar controller after a login view xcode xcode

Swift: how to show a tab bar controller after a login view


To show tab bar controller from Login page, connect the Login page and TabbarController with a Show segue and give it an identifier in attributes inspector (Say "mySegueIdentifier").

To add segue, just right click and drag from Login view controller to TabbarController.

In successful Login you can simply call "performSegueWithIdentifier" method as follows

self.performSegue(withIdentifier: "mySegueIdentifier", sender: nil)

In your case you call it after this line.

NSLog("Login OK")

If you don't want to navigate from Login page to TabbarController, you can also set it as rootViewController after successful Login.To do this, set an identifier to TabbarController (Say "myTabbarController")

let appDelegate = UIApplication.shared.delegate! as! AppDelegatelet initialViewController = self.storyboard!.instantiateViewController(withIdentifier: "myTabbarControllerID")appDelegate.window?.rootViewController = initialViewControllerappDelegate.window?.makeKeyAndVisible()

Edit:

Swift 3

 let appDelegate = UIApplication.shared.delegate! as! AppDelegate     let initialViewController = self.storyboard!.instantiateViewController(withIdentifier: "myTabbarControllerID")  appDelegate.window?.rootViewController = initialViewController appDelegate.window?.makeKeyAndVisible()

Happy coding.. :)


I ran into this same issue when trying to segue from a controller I used for touchID to a TabBarController. By making the segue in an async block I resolved the issue.

dispatch_async(dispatch_get_main_queue(), {    self.dismissViewControllerAnimated(false, completion: {})    self.performSegueWithIdentifier("authnToAppSegue", sender: nil)})


Give your tab bar controller a StoryboardID (say "tabbar") and push it just like a normal UIViewController:

let nextViewController = self.storyboard?.instantiateViewController(withIdentifier: "tabbar") as! UIViewControllerself.navigationController?.pushViewController(nextViewController, animated: true)