skyshine
skyshine

Reputation: 2864

How to present different view controllers from appdelegate in ios

Actually I am having navigationcontroller as root controller it is embed in main.storyboard,i am having two screens one screen login and another one home as per login credentials i need to skip login screen and i need to show home screen.From appdelegate i am doing this skipping it is not working properly

Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x7fadf384c600>.

 let storyboard=UIStoryboard.init(name: "Main", bundle: nil)
        let navigationController=storyboard.instantiateInitialViewController()
        let username=UserDefaultUtil.getString(key: AppConstants.PREF_USERID)
        print(username!)
        if username != ""
        {
            window?.rootViewController=navigationController
            let sectionController=SectionController(nibName: "SectionController" , bundle: nil)
            navigationController?.present(sectionController, animated: true, completion: nil)
        }

Upvotes: 3

Views: 296

Answers (2)

Ryan Cocuzzo
Ryan Cocuzzo

Reputation: 3219

First, check the user credentials in the login page. Then use:

if hasCredentials {
let vc:AnyObject! = self.storyboard?.instantiateViewController(withIdentifier: "someViewController")
self.show(vc as! UIViewController, sender: vc)
}

Sidenote: Personally, I do this from the login page because it simplifies the process and I do not like having weight sitting in my AppDelegate. If you were thinking you did not want people seeing your login screen who are already members, you can do it from an AppDelegate, but take into account the user experience might be diminished during the loading process if this is the route you decide to take.

Upvotes: 0

Tj3n
Tj3n

Reputation: 9943

I guess you are trying to present your sectionController in navigationController, its not really how it works, try this code:

let navigationController = self.storyboard?.instantiateInitialViewController() as! UINavigationController

and replace the present with this:

navigationController.setViewControllers([sectionController], animated: false)

or just drop the navigationController instantiate and create it with code and set it as window?.rootViewController:

let sectionController=SectionController(nibName: "SectionController" , bundle: nil)
let nav = UINavigationController(rootViewController: sectionController)
window?.rootViewController = nav

Upvotes: 3

Related Questions