如何从其他ViewController中更改AppDelegate中的RootViewController?

这是AppDelegate中的didFinishLaunchingWithOptions方法。 让我解释一下情况,我已经在我的应用程序中开发了像facebook一样的sideMenu,但现在我必须根据屏幕(ViewController)更改sideMenu列表,

这里的Side菜单是SideMenuViewController,它是一个包含的参数,最终成为窗口的rootViewController。

所以,最基本的问题就是“如何更改成为windows的rootViewController的控制器或variables”

- (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] leftMenuViewController:leftMenuViewController]; self.window.rootViewController = self.container; [self.window makeKeyAndVisible]; return YES; } 

如果任何程序员想知道更多的代码或需求,我很欢迎通过编辑我的代码或评论。

尝试这个:

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

不要忘记包含必要的头文件(例如你的AppDelegate),否则你会得到CE。 这一个似乎工作: 在这里输入图像说明

故事板

在另一个ViewController中,你可以使用下面的代码:

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

AppDelegate里面:

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

使用Swift分享知识:

从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 

用animation改变rootviewcontroller可以实现:

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

我们可以写出与此类似的泛化方法。

希望这将有助于某人。