swiftui - 在 NavigationView 中的 SwiftUI 视图之间切换
问题描述
今天我试图在 2 个不同的视图之间导航,但我想使用相同的视图来清理前一个视图中的信息。我创建了一个 MotherView 来调用 2 个不同的视图。这是我的代码
import SwiftUI
struct MotherView: View {
@ObservedObject var viewRouter: ViewRouter
var body: some View {
VStack {
if viewRouter.currentPage == "splash" {
SplashView()
} else{
ContentView()
}
}
}
}
struct MotherView_Previews : PreviewProvider {
static var previews: some View {
MotherView(viewRouter: ViewRouter())
}
}
这是我的启动画面:
struct SplashView: View {
@State private var isAnimated = true
@EnvironmentObject var pageSettings: PageSettings
var body: some View {
VStack{
LottieView(filename:"Logo")
pageSettings.currentPage = "content"
}
}
}
注意 SplashView() 是一个使用 Lottie 的动画视图,而 ContentView() 是我登录的一个视图。我想使用我的 SplashView() 启动我的应用程序,然后清理 VStack 并运行 ContentView()。
那可能吗?谢谢!
这是此代码的最后一次更新(我收到此错误:“参数类型'()'不符合预期的类型'视图'”)
struct SplashView: View {
@State private var animated = false
@EnvironmentObject var pageSettings: PageSettings
var body: some View {
VStack{
if self.animated{
pageSettings.currentPage = "content"
}else{
LottieView()
}
}
}
}
解决方案
我使用类似的技术来显示登录视图,然后在用户登录后显示内容视图。这是实现此目的的一种方法:
创建一个可观察对象
class pageSettings: ObservableObject {
@Published var currentPage: String = "splash"
}
修改您的 SceneDelegate
在之后添加以下行var window: UIWindow?
:
var pageSettings = PageSettings()
然后替换 UIHostingController 的调用:
window.rootViewController = UIHostingController(rootView: contentView)
通过这个电话:
window.rootViewController = UIHostingController(rootView: contentView.environmentObject(pageSettings))
使用你的 ObservableObject
在你的内部MotherView
,添加这个属性:
@EnvironmentObject var pageSettings: PageSettings
用这个替换你的测试:
if pageSettings.currentPage == "splash"
在您的启动画面中
您还需要调用EnvironmentObject
. 然后您可以像这样更新值currentPage
(它会立即切换视图):
pageSettings.currentPage = "content"
您可以使用环境对象在所有视图之间传递数据。
推荐阅读
- c++ - 在 C++ 中反转数组时,为什么我会在输入和输出之间得到一个“随机”数?
- python - 代码在 Jupyter 中有效,但在 Spyder 中出错
- javascript - 当网格生成低于 16 行时,网格拉伸问题
- c++ - 从 C++ 中的输入收集数据时,有没有更有效的方法可以处理变量?
- ponylang - 为什么赋值返回旧值而不是新值?
- c# - C# UWP - 如何获取对象的拖动图像?
- ruby-on-rails - Rails 应用程序、capistrano、nginx 和 puma 502 错误网关
- lua - 如何从 Lua 中的变量调用表?
- asp.net - 无法在 ASP.NET 中执行会话状态
- php - 仅显示具有特定 ID 的数据数据库