[英]SwiftUI - Removing a NavigationView?
我的入職流程的根視圖有一個 NavigationView。 我的應用程序的根視圖是一個登錄頁面,其中還包含一個 NavigationView。 這意味着當有人第一次啟動應用程序時,他們將通過入職流程 go 並登陸登錄屏幕 - 從而在導航視圖中生成導航視圖。
有沒有辦法重置視圖堆棧或在必要時簡單地刪除額外的導航視圖?
import Foundation import SwiftUI import Combine class Tower: ObservableObject { enum Views { case onboarding, login, dashboard } let objectWillChange = PassthroughSubject<Tower, Never>() @Published var currentPage: Views =.onboarding { didSet { objectWillChange.send(self) } } }
接下來是 ConductorView。 當 currentPage 發生變化時,Tower 會通知它,並加載相應的視圖。
struct ConductorView: View { @EnvironmentObject var tower: Tower var body: some View { VStack { if tower.currentPage ==.onboarding { ContentViewA() } else if tower.currentPage ==.login { ContentViewB() } } } }
最后是內容視圖。
struct ContentViewA: View { @EnvironmentObject var tower: Tower var body: some View { Button(action: { self.tower.currentPage =.login }) { Text("Go to Login") } } } }
除了 New Devs 非常感謝的解決方案外,我還使用了 BLCKBIRDS 的這篇文章。
我將擴展我的評論。 NavigationView
/ NavigationLink
不是更改視圖的唯一方法 - 也可以使用簡單的條件來確定呈現哪個視圖。
因此,假設您有一些 class 包含登錄/入職信息的 state:
class AppState: ObservableObject {
enum UserFlow {
case onboarding, login, home
}
@Published var userFlow: UserFlow = .onboarding
// ...
}
然后您的RootView
可以確定要顯示的用戶流:
struct RootView: View {
@EnvironmentObject var appState: AppState
var body: some View {
if appState.userFlow == .onboarding {
OnboardingRootView()
} else if appState.userFlow == .login {
LoginRootView()
} else {
ContentView()
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.