SwiftUIで初めの画面に遷移する(popToRootViewController)


SwiftUIで初めの画面に遷移する(popToRootViewController)方法です。 isDetailLink がポイントです。

popToRootViewController

ContentView.swift

import SwiftUI

struct ContentView: View {
    @State var isActive : Bool = false
    var body: some View {
        NavigationView {
            NavigationLink(
                destination: SecondView(rootIsActive: $isActive),
                isActive: $isActive
            ) {
                Text("Go SecondView")
            }
            .isDetailLink(false)
            .navigationBarTitle("Root")
        }
    }
}

struct SecondView: View {
    @Binding var rootIsActive : Bool
    var body: some View {
        NavigationLink(destination: ThirdView(shouldPopToRootView: self.$rootIsActive)) {
            Text("Go ThirdView")
        }
        .isDetailLink(false)
        .navigationBarTitle("SecondView")
    }
}

struct ThirdView: View {
    @Binding var shouldPopToRootView : Bool
    var body: some View {
        VStack {
            Button (action: { shouldPopToRootView = false } ){
                Text("Pop to RootView")
            }
        }.navigationBarTitle("ThirdView")
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}