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