在NavigationView中在SwiftUI上的视图之间进行更改

在NavigationView中在SwiftUI上的视图之间进行更改,swiftui,ios13,lottie,ios-navigationview,Swiftui,Ios13,Lottie,Ios Navigationview,今天,我试图在两个不同的视图之间导航,但我想使用相同的视图来清除前一个视图中的信息。我创建了一个MotherView来调用两个不同的视图。这是我的密码 import SwiftUI struct MotherView: View { @ObservedObject var viewRouter: ViewRouter var body: some View { VStack { if viewRouter.currentPage ==

今天,我试图在两个不同的视图之间导航,但我想使用相同的视图来清除前一个视图中的信息。我创建了一个MotherView来调用两个不同的视图。这是我的密码

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())
    }
}
这是我的SplashScreen:

    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()是一个带有我的登录名的视图。我想使用my SplashView()启动我的应用程序,然后清理VStack并运行ContentView()

可能吗?谢谢大家!

这是此代码的最后一次更新(我得到了此错误:“参数类型“()”与预期的类型“视图”不一致)


我使用类似的技术来显示登录视图,然后在用户登录后显示内容视图。以下是一种实现此目标的方法:

创建一个可观察对象

class pageSettings: ObservableObject {
    @Published var currentPage: String = "splash"
}
修改您的SceneDelegate

var窗口之后添加以下行:UIWindow?

var pageSettings = PageSettings()
然后替换UIHostingController的调用:

window.rootViewController = UIHostingController(rootView: contentView)
通过此呼叫:

window.rootViewController = UIHostingController(rootView: contentView.environmentObject(pageSettings))
使用您的ObservieObject

class pageSettings: ObservableObject {
    @Published var currentPage: String = "splash"
}
在您的
MotherView
中,添加以下属性:

@EnvironmentObject var pageSettings: PageSettings
将测试替换为以下内容:

if pageSettings.currentPage == "splash" 
在您的SplashScreen内

您还需要调用
环境对象
。然后,您可以像这样更新
currentPage
的值(它将立即切换视图):


您可以使用环境对象在所有视图之间传递数据。

我使用类似的技术在用户登录后显示登录视图和内容视图。以下是一种实现此目标的方法:

创建一个可观察对象

class pageSettings: ObservableObject {
    @Published var currentPage: String = "splash"
}
修改您的SceneDelegate

var窗口之后添加以下行:UIWindow?

var pageSettings = PageSettings()
然后替换UIHostingController的调用:

window.rootViewController = UIHostingController(rootView: contentView)
通过此呼叫:

window.rootViewController = UIHostingController(rootView: contentView.environmentObject(pageSettings))
使用您的ObservieObject

class pageSettings: ObservableObject {
    @Published var currentPage: String = "splash"
}
在您的
MotherView
中,添加以下属性:

@EnvironmentObject var pageSettings: PageSettings
将测试替换为以下内容:

if pageSettings.currentPage == "splash" 
在您的SplashScreen内

您还需要调用
环境对象
。然后,您可以像这样更新
currentPage
的值(它将立即切换视图):


您可以使用环境对象在所有视图之间传递数据。

非常感谢您的帮助!我在SplashScreen中遇到了这个错误:“()”不能转换为“String”,我可以使用.onAppear()方法和您自己的逻辑来解决这个问题。非常感谢你对我的帮助!我在SplashScreen中遇到了这个错误:“()”不能转换为“String”,我可以使用.onAppear()方法和您自己的逻辑来解决这个问题。多谢各位