J'essaie de comprendre comment accéder à mon écran secondaire via une alerte de bouton. Tout d'abord, l'utilisateur saisit certains champs via des champs de texte dans l'écran principal.

Au bas de cet écran, l'utilisateur appuie sur un bouton d'envoi qui affiche ensuite une alerte lui demandant s'il souhaite être redirigé vers l'écran secondaire ou annuler pour ne pas être pris. Tous les champs qui ont été saisis via l'écran principal sont ensuite transmis à l'écran secondaire. L'utilisateur a ensuite la possibilité de revenir à l'écran principal si nécessaire une fois dans l'écran secondaire.

Voici ce que j'ai essayé:

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)
                      
                    }

}

Lorsque vous utilisez le code ci-dessus, il navigue vers mon écran secondaire (View2), mais c'est comme une feuille. View2 n'a pas de propriétés de navigation vers View1 et c'est ce que j'essaie de réaliser. Toute aide sur cette question est grandement appréciée, merci!

0
Alex 12 oct. 2020 à 16:35

1 réponse

Meilleure réponse

Pour obtenir le bouton Back, vous avez besoin d'un NavigationLink contre un popover. Vous pouvez simplement "cacher" le NavigationLink à côté de votre 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()
    }
}
0
lorem ipsum 12 oct. 2020 à 14:14