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

时间:2013-07-01 15:27:34

标签: ios appdelegate rootview

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

这里的侧面菜单是SideMenuViewController,它是contains中的一个参数,最终成为window的rootViewController。

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

 - (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;

}

如果任何程序员想要了解更多代码或要求,欢迎通过编辑我的代码或评论来提供。

3 个答案:

答案 0 :(得分:14)

试试这个:

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

不要忘记包含必要的标题(例如,您的AppDelegate),否则您将获得CE。 这个似乎有效:enter image description here

答案 1 :(得分:13)

使用故事板

在另一个 ViewController 中,您可以使用以下代码:

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

内部 AppDelegate

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

答案 2 :(得分:10)

使用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

使用动画更改rootviewcontroller可以实现:

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

我们可以编写与this太相似的泛化方法。

希望这对某人有用。