如何在 SwiftUI 中放松到 MainView

cra*_*boy 8 swiftui swiftui-navigationlink

我找不到从 ViewB 转到 ContentView 而不NavigationView在另一个NavigationView.

struct ContentView: View {
    var body: some View {
        NavigationView{
            VStack {
                Text("Go to ViewA")
                NavigationLink(destination: ViewA()) {Text("Go")}
            }.navigationBarTitle("ContentView")
        }
    }
}

struct ViewA: View {
   @Environment(\.presentationMode) var presentationMode
    var body: some View {
        VStack {
            Text("Go to ViewB")
            NavigationLink(destination: ViewB()) {Text("Go to B")}
            Text("Go back")
            Button(action: { self.presentationMode.wrappedValue.dismiss() }) {Text("Go to ContentView")}
        }.navigationBarTitle("ViewA")
    }
}

struct ViewB: View {
    @Environment(\.presentationMode) var presentationMode
    var body: some View {
        VStack {
            Text("Go Home")
            NavigationLink(destination: ContentView()) {Text("Go")}
            Text("Go back")
            Button(action: { self.presentationMode.wrappedValue.dismiss() }) {Text("Go to ViewB")}
        }.navigationBarTitle("ViewB")
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
Run Code Online (Sandbox Code Playgroud)

在“旧” Swift 中,我可以轻松地进行 unwindSegue 之类的

@IBAction func unwindToVCMain(segue:UIStoryboardSegue) { }
}
Run Code Online (Sandbox Code Playgroud)

并轻松调用它

performSegue(withIdentifier: "unwindToVcMain", sender: nil)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

小智 0

我也在寻找这个方法。
我采用了调用self.presentationMode.wrappedValue.dismiss()两次,但它与展开事务的行为并不完全相同。