質問: 1 ``` と書けばSecondViewには遷移しますが、ターゲット画面への遷移はできません。 このような場合、どのような処理でターゲット画面へ遷移することが一般的なのでしょうか。 ご教示頂けますと幸いです。 よろしくお願いいたします。
回答: ### どのような処理でターゲット画面に遷移することが一般的なのか? このような遷移自体が一般的ではないため、一般的な処理方法というのもありません。 ご存知かと思いますが、iOSでは通常の画面遷移も、`UINavigationController`内の画面遷移も、スタック状に管理されており、ツリー構造になっています。別の枝の途中に直接遷移する、なんてことはサポートされていません。 iOS用のアプリを作成されるなら、マルチウインドウのPC用アプリや、Webアプリでの感覚を引きずらずに、iOSに適した画面遷移となるよう、設計を見直すことをお勧めしておきます。 以下に「見かけは動いているように見せられるけど」と言う回答をお示ししますが、詳細な挙動を調べてもらえれば、あなたのアプリには採用できないようなものであるかもしれません。そのような場合には、あなたのアプリではどのような動作をさせたいのかの詳細をご質問に追記してみてください。 ### `tabBarController?.selectedIndex = 1`と書いてもターゲット画面に遷移できない `UITabBarController`的にみると、`selectedIndex = 1`のview controllerは、SecondViewController (今回の問題には本質的ではないですが、iOSプログラミングではviewとview controllerは共に大変重要な要素なので、view controllerを〜Viewと呼称することはやめた方が良いでしょう)ではなく、`UINavigationController`なので、その`UINavigationController`に「ターゲット画面に遷移させておく」と言うことは、出来なくはありません。 ``` @IBAction func 移動1Action(_ sender: Any) { guard let storyboard = self.storyboard else { print("Storyboard not used") return } let targetVC = storyboard.instantiateViewController(withIdentifier: "ここに直接行きたい") if let navVC = self.tabBarController?.viewControllers?[1] as? UINavigationController { if !(navVC.topViewController is ここに直接行きたいVC) { navVC.pushViewController(targetVC, animated: false) } } self.tabBarController?.selectedIndex = 1 } ``` 一体なぜこのような画面遷移が必要になるのか、目的をはっきりさせれば、より良い回答が得られるでしょう。