How to change RootViewController in AppDelegate From Other ViewController?

This is didFinishLaunchingWithOptions Method in AppDelegate.
Let me explain scenario, I have developed sideMenu like facebook in my app, but now I have to change the sideMenu list according to screens (ViewController)

Here the side Menu is SideMenuViewController, which is an argument in contain, which ultimately becomes window’s rootViewController.

  • Swap rootViewController with animation?
  • Programming iOS: clarifications about Root View Controller
  • SO, The very basic question arises is “How to change the controller or variable which becomes rootViewController of windows”

     - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    SideMenuViewController *leftMenuViewController = [[SideMenuViewController alloc] init];
    self.container = [ContainerOfSideMenuByVeerViewController
                      containerWithCenterViewController:[self navigationController]
    self.window.rootViewController = self.container;
    [self.window makeKeyAndVisible];
    return YES;

    If any programmer wants to know more code or requirement, I do welcome to provide by editing my code or in comments.

    3 Solutions Collect From Internet About “How to change RootViewController in AppDelegate From Other ViewController?”

    Try this:

    <YourAppDelegateClass> *app = [[UIApplication sharedApplication] delegate];
    app.window.rootViewController = <YourRootViewController>;

    Don’t forget to include necessary headers (your AppDelegate, for example) or you’ll get CE.
    This one seems to work:enter image description here

    With Storyboard

    Inside another ViewController you can use this code:

    self.view.window.rootViewController = [self.view.window.rootViewController.storyboard   instantiateViewControllerWithIdentifier:@"**STORYBOARD ID**"];

    Inside AppDelegate:

    self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"**STORYBOARD ID**"];

    Knowledge Sharing Using Swift:

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

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

    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.

    Hope this will helpful for someone.