简体   繁体   English

SwiftUI:如何关闭模式表,然后一起执行导航链接

[英]SwiftUI: How to dismiss a modal sheet and then execute a navigationlink together

I've got an onboarding process with a welcome view that has two buttons that open modal sheets for signup and login.我有一个带有欢迎视图的入职流程,其中有两个按钮可以打开模式表以进行注册和登录。

Once signup is completed, the button should close the modal view for Signup and transition to another Dashboard view.注册完成后,该按钮应关闭注册模式视图并转换到另一个仪表板视图。

How can I close the modal and then execute the navigationlink to the dashboard view?如何关闭模式,然后执行导航链接到仪表板视图?

import SwiftUI
import Firebase

struct Signup: View {    

@State private var isAuthCompleted: Bool = false
@State private var isShowingAlert = false
@State private var localMsg: String = ""

@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

.
.
.


// signup button

        NavigationView {

            VStack {

                NavigationLink(destination: ContentView(),
                               isActive: self.$isAuthCompleted) {
                                Text("")
                }

                Button(action: {

                    Auth.auth().createUser(
                    withEmail: self.email,
                    password: self.password
                    ) {
                        authResult, error in
                        if let e = error {

                            print(e.localizedDescription)
                            self.localMsg = e.localizedDescription
                            self.isShowingAlert = true

                        } else {

                            self.presentationMode.wrappedValue.dismiss() // modal sheet dismiss                                
                            self.isAuthCompleted = true // navigationlink execution


                            }

                        }

                }) {

                    HStack {
                        Spacer()
                        Text("Sign Up")
                        .font(.headline)
                        .foregroundColor(.white)
                        Spacer()
                    }
                    .padding()
                    .background(Color.green)
                    .cornerRadius(20.0)

                }
                .alert(isPresented: $isShowingAlert) {
                    Alert(title: Text("Wait A Minute"), message: Text(self.localMsg), dismissButton: .default(Text("Got it!")))
                }

            }
            .navigationBarTitle("")
            .navigationBarHidden(true)

        }

You can use the method to show a modal and execute an action on dismiss.您可以使用该方法显示模式并在关闭时执行操作。 It should look similar to this:它应该类似于:

import SwiftUI

struct Signup: View {

  // Property to keep track of your modal state
  @State var isPresented = false

  var body: some View {
    NavigationView {
      VStack {
        Button(action: {
           // Show / hide the modal view with toggle()
           self.isPresented.toggle()
        }, label: {
           // Your button label
        })
          .sheet(isPresented: $isPresented, 
                 onDismiss: {
                  // What happen when your modal dismiss
          }) {
            // Modal view that opens to be declared here
        }
      }
    }
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM