NavigationStackの特徴としてpathを用意して、好きな画面に遷移できるところです。
例えば以下ではHome>画面A>画面B>画面Cに遷移して、画面Cのボタンを選択すると2つ前の画面Aに戻れます。
import SwiftUI
enum Path {
case screenA, screenB, screenC
}
struct ContentView: View {
@State private var navigatePath: [Path] = []
var body: some View {
NavigationStack(path: $navigatePath) {
VStack {
Button("画面複数遷移"){
navigatePath.append(contentsOf: [.screenA, .screenB, .screenC])
}
}
.navigationDestination(for: Path.self) { value in
switch value {
case .screenA:
PathView(navigatePath: $navigatePath, text: "A")
case .screenB:
PathView(navigatePath: $navigatePath, text: "B")
case .screenC:
PathView(navigatePath: $navigatePath, text: "C")
}
}
}
}
}
struct PathView: View{
@Binding var navigatePath: [Path]
var text : String
var body: some View{
Button("画面\(text)"){
if navigatePath.count > 2 {
// 2つ前の画面に戻る
navigatePath.removeLast(2)
}
}
}
}