iOS 8.0、Xcode 6.0.1、ARC 対応
あなたの質問のほとんどは答えられました。しかし、最近自分で対処しなければならなかった問題に取り組むことができます。
アプリ内でルート ビュー コントローラーを複数回変更しても問題ありませんか?
答えはイエスです。アプリの一部であった最初のUIViewの後にUIView階層をリセットするために、最近これを行う必要がありました。起動する必要がなくなりました。つまり、アプリの後でいつでも他の UIViewController から「rootViewController」をリセットできます。"didFinishLoadingWithOptions".
これをする...
1) アプリへの参照を宣言します。デリゲート(「テスト」と呼ばれるアプリ)...
TestAppDelegate *testAppDelegate = (TestAppDelegate *)[UIApplication sharedApplication].delegate;
2) 「rootViewController」にしたい UIViewController を選択します。ストーリーボードから、またはプログラムで定義します...
a) ストーリーボード (識別子、つまり、storyboardID が UIViewController の Identity Inspector に存在することを確認します):
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
NewRootViewController *newRootViewController = [mainStoryBoard instantiateViewControllerWithIdentifier:@"NewRootViewController"];
b)プログラムで(サブビューなどを追加できます)
UIViewController *newRootViewController = [[UIViewController alloc] init];
newRootViewController.view = [[UIView alloc] initWithFrame:CGRectMake(0, 50, 320, 430)];
newRootViewController.view.backgroundColor = [UIColor whiteColor];
3) まとめて…
testAppDelegate.window.rootViewController = newRootViewController;
[testAppDelegate.window makeKeyAndVisible];
4) アニメーションを挿入することもできます...
testAppDelegate.window.rootViewController = newRootViewController;
[testAppDelegate.window makeKeyAndVisible];
newRootViewController.view.alpha = 0.0;
[UIView animateWithDuration:2.0 animations:^{
newRootViewController.view.alpha = 1.0;
}];
これが誰かを助けることを願っています! 乾杯。
ウィンドウのルート ビュー コントローラー。
ルート ビュー コントローラーは、ウィンドウのコンテンツ ビューを提供します。ビュー コントローラーをこのプロパティに割り当てると (プログラムまたは Interface Builder を使用して)、ビュー コントローラーのビューがウィンドウのコンテンツ ビューとしてインストールされます。ウィンドウに既存のビュー階層がある場合、新しいビューがインストールされる前に古いビューが削除されます。このプロパティのデフォルト値は nil です。
*2015 年 9 月 2 日更新
以下のコメントが指摘しているように、新しいView Controllerが表示されたら、古いView Controllerの削除を処理する必要があります。これを処理する遷移ビュー コントローラーを選択することもできます。これを実装する方法に関するいくつかのヒントを次に示します。
[UIView transitionWithView:self.containerView
duration:0.50
options:options
animations:^{
//Transition of the two views
[self.viewController.view removeFromSuperview];
[self.containerView addSubview:aViewController.view];
}
completion:^(BOOL finished){
//At completion set the new view controller.
self.viewController = aViewController;
}];