🔨
SwiftUI - popToRootViewControllerと同じ処理をする方法
作るもの
SwiftUIでSwiftのpopToRootViewControllerと同じように2つ以上前の画面に戻る処理を実装します。
完成イメージ
完成コード
import SwiftUI
struct ContentView: View {
@State var isActive : Bool = false
var body: some View {
NavigationView {
NavigationLink(
destination: ContentView2(isActive: $isActive), isActive: $isActive) {
Text("次へ")
}
.navigationBarTitle("1つ目の画面")
}
}
}
struct ContentView2: View {
@Binding var isActive : Bool
var body: some View {
NavigationLink(destination: ContentView3(isActive: $isActive)) {
Text("次へ")
}
.navigationBarTitle("2つ目の画面")
}
}
struct ContentView3: View {
@Binding var isActive : Bool
var body: some View {
VStack {
Button (action: {
isActive = false
} ){
Text("最初の画面に戻る")
}
}.navigationBarTitle("3つ目の画面")
}
}
ポイント
NavigationのON/OFF
@State var isActive : Bool = false
まず1番最初の画面でNavigationLinkのオンオフを制御する変数「isActive」を定義します。
これをNavigationLinkの「isActive:」という引数に入れると、trueの時に次の画面に移動し、falseの時に元の画面に戻るようになります。
変数を受け継ぐ
NavigationLink(destination: ContentView2(isActive: $isActive), isActive: $isActive)
定義した変数を@Bindingを使って次の画面へ受け継いでいきます。
NavigationLinkをタップするとisActiveがfalseからtrueに切り替わります。
最初に戻る
isActive = false
最後の画面の「isActive」も最初の画面のものと繋がっているので、ここをfalseにセットすると最初の画面まで戻ります。
Discussion