【问题标题】:SwiftUi: Navigating to a secondary page through Button Alert ConfirmationSwiftUi:通过按钮警报确认导航到辅助页面
【发布时间】:2020-10-12 22:14:28
【问题描述】:

我试图弄清楚如何通过按钮警报导航到我的辅助屏幕。首先,用户通过主屏幕中的文本字段输入一些字段。

在此屏幕的底部,用户按下提交按钮,然后会弹出一个警报,询问他们是否希望被带到辅助屏幕或取消不被带到。所有通过主屏幕输入的字段然后都会传递到辅助屏幕。如有必要,用户可以选择在辅助屏幕中导航回主屏幕。

这是我尝试过的:

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 的导航属性,这就是我想要实现的。非常感谢您对此事的任何帮助,谢谢!

【问题讨论】:

    标签: swiftui swiftui-navigationlink


    【解决方案1】:

    要获得Back 按钮,您需要NavigationLinkpopover。您可以“隐藏”NavigationLink 旁边的 Button

    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 的两个单独页面。在页面之间导航时,我是否总是必须在主视图中有一个子视图,或者我也可以有两个快速页面来执行此操作?让我知道你的想法,谢谢!
    • 子视图? NavigationView 通常有某种列表和详细视图/NavigationLink。其他选项可以是 TabViewUIKit 页面控件 developer.apple.com/tutorials/swiftui/interfacing-with-uikit 。另外,如果上面的代码是正确的,你可以“接受”答案,这样我就可以得到信用了吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多