![](/img/trans.png)
[英]How to check validation of TextField on Button Tap (not by using NavigationLink) in SwiftUI?
[英]How to move Views in SwiftUI with Button Tap or add an action to NavigationLink?
我知道这个问题已经被问了一百万次了,但无论如何我仍然找不到一个好的答案。
一直在使用 SwiftUI(刚刚开始)并使用现有代码包括 Firebase 通过电话注册/登录。
流量是
在我的第一个视图(ContentView)中,我有以下代码:
struct ContentView: View {
@AppStorage("log_Status") var status = false
@State private var onboardinDone = false
var data = OnboardingDataModel.data
var body: some View {
ZStack{
Group {
if !onboardinDone {
OnboardingViewPure(data: data, doneFunction: {
status = true
self.onboardinDone = true
print("done onboarding")
})
} else {
NavigationView{
VStack{
if status{Home()}
else{Login()}
}
.preferredColorScheme(.dark)
.navigationBarHidden(true)
}
}
}
}
}
}
现在,所有视图都已编码并且可以正常工作(使用 Firebase),并且在以前的 Swift 版本中,当点击按钮时我会继续。 但是,在 SwiftUI 中,这不是一个选项,您现在需要使用导航链接(可能看起来像一个按钮)。
例如,在我的“ VerficationView ”中有一个执行操作的按钮。
按钮(操作:loginData.verifyCode){
现在,在点击按钮并在后台验证数据后,我想移动到我创建的下一个视图,该视图注册用户的“姓名、简历和图像”( RegisterView )。 此视图工作并将用户的数据注册在 Firebase 中。 但是,一旦用户单击上述按钮,我不知道如何正确呈现此屏幕。
请让我知道您的想法,因为我被卡住了,不知道如何继续....
谢谢!
我会将此作为评论发布,但我没有足够的声誉。
我通过将登录屏幕显示为 a.fullScreenCover 解决了类似的问题。 这使它脱离了正常的导航层次结构,因此 ContentView 仍然是根视图。 登录完成后,通过 @Binding 更改 ContentView 中的 Bool。 这将更改 ContentView 的 state,因此现在 ifelse 可以将用户发送到您的第一页。
.fullScreenCover(isPresented: $isPresented) {
编辑:
也许不需要 FullScreenCover 只是else if
。 见下文。
struct ContentView: View {
@State private var isOnboardinDone: Bool = false
@State private var isLoggedIn: Bool = false
var body: some View {
if isOnboardinDone && isLoggedIn {
FirstView()
} else if !isOnboardinDone {
OnboardingView(done: $isOnboardinDone)
} else {
LoginView(loggedIn: $isLoggedIn)
}
}
}
struct FirstView: View {
var body: some View {
Text("First")
}
}
struct OnboardingView: View {
@Binding var done: Bool
var body: some View {
Button(action: { done.toggle() }, label: {
Text("On Boarding done.")
})
}
}
struct LoginView: View {
@Binding var loggedIn: Bool
var body: some View {
Button(action: { loggedIn.toggle() }, label: {
Text("Login")
})
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.