web-dev-qa-db-ja.com

AppDelegateのRootViewControllerを他のViewControllerから変更する方法は?

これは、AppDelegateのdidFinishLaunchingWithOptionsメソッドです。シナリオを説明してみましょう。アプリでfacebookのようなsideMenuを開発しましたが、画面(ViewController)に従ってsideMenuリストを変更する必要があります。

ここでサイドメニューはSideMenuViewControllerです。これは、containerの引数であり、最終的にはウィンドウのrootViewControllerになります。

SO、非常に基本的な問題が発生します「ウィンドウの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;

}

プログラマーがさらに多くのコードや要件を知りたい場合は、コードを編集したり、コメントで提供したりできます。

14

これを試して:

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

必要なヘッダー(AppDelegateなど)を含めることを忘れないでください。そうしないと、CEが取得されます。これはうまくいくようです:enter image description here

14
Renderhp

ストーリーボード

別の内部ViewControllerこのコードを使用できます:

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

内部AppDelegate

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

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 に非常に類似した一般化メソッドを書くことができます。

これが誰かのために役立つことを願っています。

10
Arvind