SwiftUi:通过按钮警报确认导航到辅助页面

SwiftUi:通过按钮警报确认导航到辅助页面,swiftui,swiftui-navigationlink,Swiftui,Swiftui Navigationlink,我正试图找出如何通过按钮警报导航到我的第二个屏幕。首先,用户通过主屏幕中的文本字段输入一些字段 在这个屏幕的底部,用户按下提交按钮,然后弹出一个警报,询问他们是想进入第二个屏幕还是想取消。通过主屏幕输入的所有字段都将传递到辅助屏幕。如果需要,用户可以在辅助屏幕中导航回主屏幕一次 以下是我尝试过的: struct View1: View { @State var txtField1 : String = "" @State var txtField2: Stri

我正试图找出如何通过按钮警报导航到我的第二个屏幕。首先,用户通过主屏幕中的文本字段输入一些字段

在这个屏幕的底部,用户按下提交按钮,然后弹出一个警报,询问他们是想进入第二个屏幕还是想取消。通过主屏幕输入的所有字段都将传递到辅助屏幕。如果需要,用户可以在辅助屏幕中导航回主屏幕一次

以下是我尝试过的:

struct View1: View {
    @State var txtField1 : String = ""
    @State var txtField2: String = ""
    @State var txtField3: String = ""
    @State var txtField4: String = ""
    @State var txtField5 : String = ""
   
    @State private var showingAlert = false
    @State private var showingView = false

    var body: some View {
    HStack{
                    Button(action: {
                        self.showingAlert = true
                    }) {
                        Text("Submit")
                            .alert(isPresented:$showingAlert) {
                                Alert(title: Text("Would you like to go to second screen?"), message: Text("The second screen will pass all data from the first screen."), primaryButton:.destructive(Text("Continue")){
                                    self.showingView = true
                                    }, secondaryButton: .cancel(Text("Cancel")))
                        }
                    }
                }.popover(isPresented: $showingView){
                    NavigationView{
                        View2(txtField1: self.$txtField1, txtField2: self.$txtField2, txtField3: self.$txtField4, txtField5: self.$txtField5)
                      
                    }

}

当使用上面的代码时,它确实会导航到我的第二个屏幕(View2),但是它就像一张纸。View2没有返回到View1的导航属性,这就是我试图实现的。非常感谢您在这件事上的任何帮助,谢谢

要返回
按钮,您需要一个
导航链接
vs
弹出框
。您只需“隐藏”您的
按钮旁边的
导航链接

import SwiftUI

struct ConfirmNavView: View {
    @State var txtField1 : String = ""
    @State var txtField2: String = ""
    @State var txtField3: String = ""
    @State var txtField4: String = ""
    @State var txtField5 : String = ""
    
    @State private var showingAlert = false
    @State private var showingView = false
    
    var body: some View {
        NavigationView{
            HStack{
                Button(action: {
                    self.showingAlert = true
                }) {
                    Text("Submit")
                        .alert(isPresented:$showingAlert) {
                            Alert(title: Text("Would you like to go to second screen?"), message: Text("The second screen will pass all data from the first screen."), primaryButton:.destructive(Text("Continue")){
                                self.showingView = true
                            }, secondaryButton: .cancel(Text("Cancel")))
                        }
                }
                
                NavigationLink("View2", destination: View2(txtField1: self.$txtField1,
                                                           txtField2: self.$txtField2,
                                                           txtField3: self.$txtField3,
                                                           txtField4: self.$txtField4,
                                                           txtField5: self.$txtField5), isActive: $showingView).hidden().frame(width: 0, height: 0)
            }
        }
        
    }
}
struct View2: View {
    @Binding var txtField1 : String
    @Binding var txtField2: String
    @Binding var txtField3: String
    @Binding var txtField4: String
    @Binding var txtField5 : String
    var body: some View {
        VStack{
            TextField("txtField1", text: $txtField1)
            TextField("txtField2", text:$txtField2)
            TextField("txtField3", text:$txtField3)
            TextField("txtField4", text:$txtField4)
            TextField("txtField5", text:$txtField5)
        }
    }
}
struct ConfirmNavView_Previews: PreviewProvider {
    static var previews: some View {
        ConfirmNavView()
    }
}

非常感谢你!这正是我想要的。出于好奇,虽然我最初构建的项目有两个独立的视图1和视图2页面。在页面之间导航时,我是否总是必须在主视图中有一个子视图,或者我是否也可以有两个swift页面来执行此操作?让我知道你的想法和感谢!子视图?
NavigationView
通常有某种列表和详细视图/
NavigationLink
。其他选项可以是
TabView
UIKit
页面控件。另外,如果上面的代码是正确的,你能“接受”答案,这样我就可以得到学分吗?非常感谢。