【问题标题】:How to change RootViewController in AppDelegate From Other ViewController?如何从其他 ViewController 更改 AppDelegate 中的 RootViewController?
【发布时间】:2013-06-28 19:01:20
【问题描述】:

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

这里的side Menu是SideMenuViewController,是contain中的一个参数,最终成为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;

}

如果有程序员想了解更多代码或需求,欢迎通过编辑我的代码或在 cmets 中提供。

【问题讨论】:

    标签: ios appdelegate rootview


    【解决方案1】:

    试试这个:

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

    不要忘记包含必要的标头(例如您的 AppDelegate),否则您将获得 CE。 这个好像可行:

    【讨论】:

    • 亲爱的,我已经尝试过了,它会将我带到主窗口屏幕,但是亲爱的,我已经推送并导航了两个控制器而不是主控制器,所以?
    • 好吧,您可以使用&lt;yourController&gt;.navigationController.viewControllers 访问导航控制器中的控制器堆栈。它返回 NSArray。并尝试用您的新控制器替换此阵列中的第一个控制器。
    • 不完全是,但你的方式帮助我解决了我的问题。谢谢@renderhp
    • 亲爱的你能帮我解决这个stackoverflow.com/questions/17960034/…
    • @Renderhp:我按照你的想法更改了我的 rootViewcontroller,但在 newrootview 中我无法执行任何操作。请帮帮我。
    【解决方案2】:

    带有故事板

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

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

    AppDelegate 内:

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

    【讨论】:

      【解决方案3】:

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

      希望这对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多