如何从其他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)
我们可以写出与此类似的泛化方法。
希望这将有助于某人。