【问题标题】:SwiftUI: How to dismiss a modal sheet and then execute a navigationlink togetherSwiftUI:如何关闭模式表,然后一起执行导航链接
【发布时间】:2019-11-13 14:19:08
【问题描述】:

我有一个带有欢迎视图的入职流程,其中有两个按钮可以打开用于注册和登录的模式表。

注册完成后,该按钮应关闭注册模式视图并转换到另一个仪表板视图。

如何关闭模态框,然后执行导航链接到仪表板视图?

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)

        }

【问题讨论】:

    标签: ios swift modal-dialog swiftui navigationlink


    【解决方案1】:

    您可以使用该方法显示模式并在关闭时执行操作。它应该看起来像这样:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      相关资源
      最近更新 更多