ios - 在 SwiftUI 中更改 UIHostingController 的根视图
问题描述
对于一个新的SwiftUI
iOS 应用程序,我在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
状态的变化吗?
解决方案
声明一个 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 中找到它们自己。
推荐阅读
- swift - 取消 OperationQueue Swift
- asp.net-core - 如果我在 Controller 中使用 IService 并按 IService->Service->IRepository->Repository 的顺序连接 Iservice,如何添加范围
- python-3.x - 在 for 循环中添加熊猫附加问题
- html - 导航栏左侧的间隙
- javascript - 获取数据后设置状态的问题(React 挂钩)
- regex - 在正则表达式上需要帮助以进行多次替换
- corpus - 我在哪里可以获得 Quanteda 网站上的示例中使用的 data_corpus_irishbudget2010?
- netbeans - Netbeans 项目部署到 TomEE 间歇性 FileNotFoundException
- javascript - D3.js ResizeObserver 渲染问题。调整大小后未删除轴
- javascript - React 无法识别 DOM 元素上的 `controlID` 属性(React-Bootstrap Forms)