Set rootViewController of UINavigationController by method other than initWithRootViewController Set rootViewController of UINavigationController by method other than initWithRootViewController ios ios

Set rootViewController of UINavigationController by method other than initWithRootViewController


You can solve this by calling setViewControllers.

Like this:

UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyNavigationBar class] toolbarClass:[UIToolbar class]];[navigationController setViewControllers:@[yourRootViewController] animated:NO];

Swift version:

let navigationController = UINavigationController(navigationBarClass: MyNavigationBar.self, toolbarClass: UIToolbar.self)navigationController.setViewControllers([yourRootViewController], animated: false)


Knowledge Sharing Using Swift:

Changing root view controller from class other than app delegate.swift

let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegatelet mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)var homeViewController = mainStoryboard.instantiateViewControllerWithIdentifier("HomeViewController") as! HomeViewControllerlet nav = UINavigationController(rootViewController: homeViewController)appdelegate.window!.rootViewController = nav

Hope this will helpful for someone.

Edited:

Changing rootviewcontroller With Animation can be achieve with:

 UIView.transitionWithView(self.window!, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: {    self.window?.rootViewController = anyViewController}, completion: nil)

We can write generalise method too similar to this.


this one works for me, hope it helps you,

let rootVC:LoginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewControllerlet nvc:UINavigationController = self.storyboard?.instantiateViewControllerWithIdentifier("RootNavigationController") as! UINavigationControllernvc.viewControllers = [rootVC]UIApplication.sharedApplication().keyWindow?.rootViewController = nvc