UINavigationContoller で navigation stack の階層を変えずに画面遷移する方法
画面の差し替え
Pop and Push
↑こんな挙動をさせたいと思ったことはありませんか?
ViewController の pop をアニメーション無しで、push をアニメーションありで・・・ そんなことは不要です。
setViewControllers
UINavigationController の navigation stack を一気に更新したい場合はsetViewControllers:animated:メソッドを利用します。
例
NavigarionController によって管理される Root, A, B という 3 つの画面(ViewController)があるとします。
画面遷移
※-の後ろは navigation stack を表現しています。
- Root を表示 - Root
- A に遷移 - Root / A
- B に遷移 - Root / B <- こうしたい!(普通なら Root / A / B となる)
サンプルコード
画面 A から画面 B に遷移する時の処理
NSMutableArray *viewControllers = [self.navigationController.viewControllers mutableCopy]; [viewControllers removeLastObject]; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *BViewContorller = [storyboard instantiateViewControllerWithIdentifier:@"B"]; [viewControllers addObject:BViewContorller]; [self.navigationController setViewControllers:[viewControllers copy] animated:YES];
実行動画
まとめ
UINavigationController クラスのsetViewControllers:animated:メソッドを使えば、とても簡単に画面の差し替えが実現できます。 動的に navigation stack を更新したい場合は試してみてください。
リファレンスを見てみるとAvailable in iOS 3.0 and later.と書かれています。 かなり昔からあるメソッドのようですね。 ・・・私は昨日知りました(泣)