質問: ### 前提・実現したいこと Swift 4にてアプリ開発をしています。 AppDelegateにてNavigationControllerを用いて 2画面まとめて遷移させる方法が分からず困っています。 構成は以下のようなものです。 * A画面(NavigationControllerの1階層目) * B画面(NavigationControllerの2階層目) #### 実現したい挙動) * プッシュ通知をタップするとユーザの操作なしでB画面に遷移 * スワイプなどでA画面に戻る プッシュ通知を受け取り、タップした挙動にて NavigationControllerの2階層目まで遷移する挙動を実現したいのですが、 実装方法が分からず困っています。 イメージとしては、LINEで通知を受け取り、タップした際にメッセージ表示画面まで遷移するようなものです。 ### 試したこと AppDelegateからUIViewControllerをインスタンス化し、 2階層目のB画面を表示させることまではできました。 ただそれだとスワイプなどで戻ったときに、 A画面に戻すことができず困っています。 そもそもこのような挙動は実現できるのでしょうか? (LINEで同様の挙動をしているので可能だとは思っています) できるのであれば、実装方法を教えていただけないでしょうか。 ### 補足情報(FW/ツールのバージョンなど) 開発環境 * Swift 4.0 * Xcode 9.2
回答: NavigationControllerのviewControllersに2つのViewControllerをセットしてはいかがでしょうか? ものすごいざっくりとして恐縮ですが、 ``` // AppDelegate.swiftの中です func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { window = UIWindow(frame: UIScreen.main.bounds) // 仮にMain.storyboardにFirst、SecondというStoryboardIDのVIewControllerがあるとします。 let sb = UIStoryboard(name: "Main", bundle: nil) let v1 = sb.instantiateViewController(withIdentifier: "First") let v2 = sb.instantiateViewController(withIdentifier: "Second") // NavigationContollerにViewControllerを設定します。 let nv = UINavigationController() nv.viewControllers = [v1, v2] window?.rootViewController = nv window?.makeKeyAndVisible() return true } ``` こうするとSecondのViewControllerが表示されると思いますので、スワイプアクションに合わせて ``` navigationController?.popViewController(animated: true) ``` とするとFirstの画面に戻ります。 イメージに合いますでしょうか?