Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从其他ViewController更改AppDelegate中的RootViewController?_Ios_Appdelegate_Rootview - Fatal编程技术网

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

Ios 如何从其他ViewController更改AppDelegate中的RootViewController?,ios,appdelegate,rootview,Ios,Appdelegate,Rootview,这是AppDelegate中的didFinishLaunchingWithOptions方法。 让我解释一下这个场景,我在我的应用程序中开发了类似facebook的侧菜单,但现在我必须根据屏幕(ViewController)更改侧菜单列表 这里的侧菜单是SideMenuViewController,它是contain中的一个参数,最终成为窗口的rootViewController 因此,最基本的问题是“如何更改成为windows rootViewController的控制器或变量” 如果任何程序

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

这里的侧菜单是SideMenuViewController,它是contain中的一个参数,最终成为窗口的rootViewController

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

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

试试这个:

<YourAppDelegateClass> *app = [[UIApplication sharedApplication] delegate];
app.window.rootViewController = <YourRootViewController>;
*app=[[UIApplication sharedApplication]委托];
app.window.rootViewController=;
不要忘记包含必要的头(例如,您的AppDelegate),否则您将获得CE。
这一个似乎有效:

与故事板一起

在另一个视图控制器中可以使用以下代码:

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
使用动画更改rootviewcontroller可以通过以下方式实现:

UIView.transitionWithView(self.window!, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: {
      self.window?.rootViewController = anyViewController
}, completion: nil)
我们可以写的概括方法太类似于


希望这对某人有所帮助。

亲爱的,我已经尝试过了,它让我进入了主windows屏幕,但亲爱的,我已经在主控制器内推送和导航了两个控制器,所以?好吧,您可以使用
.navigationController.viewControllers
访问导航控制器中的控制器堆栈。它返回NSArray。并尝试用新的控制器替换此阵列中的第一个控制器。不完全正确,但您的方法帮助我解决了很多问题。谢谢@renderhpDear你能帮我做这个吗@Renderhp:我根据你的想法更改了我的rootViewcontroller,但是在newrootview中我不能执行任何操作。请帮帮我。
UIView.transitionWithView(self.window!, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: {
      self.window?.rootViewController = anyViewController
}, completion: nil)