首页 > 解决方案 > 在 SwiftUI 中更改 UIHostingController 的根视图

问题描述

对于一个新的SwiftUIiOS 应用程序,我在SceneDelegate

if let windowScene = scene as? UIWindowScene {
    let window = UIWindow(windowScene: windowScene)
    if Auth().token == nil {
        window.rootViewController = UIHostingController(rootView: StartRegistrationView())
    } else {
        window.rootViewController = UIHostingController(rootView: MainTabbedView())
    }
    self.window = window
    window.makeKeyAndVisible()
}

当用户尚未注册或登录时,他们将进入注册流程。

用户注册后,如何将 RootView 切换到我的 TabView?我似乎找不到任何使用SwiftUI.

我应该改用一个Environment对象并监听用户Auth状态的变化吗?

标签: iosswiftswiftui

解决方案


声明一个 AppRootView,如下所示:

struct AppRootView: View {

    @ObservedObject private var auth: Auth
    var body: some View {
        Group {
            if auth.token != nil {
                MainTabbedView()
            } else {
                StartRegistrationView()
            }
        }
    }
}

然后在 SceneDelegate 中将其设置为根视图:

window.rootViewController = UIHostingController(rootView: AppRootView(auth: $auth))

您必须将您的视图绑定到您的 Auth() 或者通过像我上面所做的那样传递它或者通过在您的环境中设置它。SwiftUI 的美妙之处在于,只要令牌不为零,视图就会重绘,您的用户会在 MainTabbedView 中找到它们自己。


推荐阅读