[英]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.