繁体   English   中英

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

[英]How to change RootViewController in AppDelegate From Other ViewController?

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

这里的侧面菜单是SideMenuViewController,它是contains中的一个参数,最终成为窗口的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;

}

如果有任何程序员想了解更多代码或要求,欢迎通过编辑代码或在注释中提供。

尝试这个:

<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进行知识共享:

从应用程序委托以外的类更改根视图控制器

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)

我们可以写与大致相似的一般化方法。

希望这对某人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM