今までUIKitで、UIWindow.rootViewController
を置き換えたりしたことがありました。
SwiftUI
ではどのように実装するのか?という疑問があったので、調べました。
環境
iOS14以降のSwiftUIライフサイクルを使う場合です。
Xcode12では、プロジェクトを作成する際、Life CycleとしてSwiftUI App
とUIKit App Delegate
が選べますが、前者を選んだ場合です。
rootViewController相当の切り替え方法
以下のように実装します。
@main
struct LaunchScreenTestApp: App {
@State var index: Int = 0
var body: some Scene {
WindowGroup {
if self.index == 0 {
ContentView(index: self.$index)
} else {
SecondView(index: self.$index)
}
}
}
}
ポイントは、WindowGroup
で囲い、index
でスイッチしているところです。
ContentView
の中でindexを変える操作を行うことで、SecondView
に切り替わります。
XcodeのView Hierarchy
を使って調べましたが、rootViewController相当の変更になっていました。
参考
https://stackoverflow.com/questions/58104813/change-the-root-view-of-uihostingcontroller-in-swiftui
→この方法を使いました
https://qiita.com/Pman5151/items/0c079e2c79f132597ef9
→この方法とは別ですが、参考にしました。