【问题标题】:How do I change the root view with SwiftUI如何使用 SwiftUI 更改根视图
【发布时间】:2021-03-14 07:59:30
【问题描述】:

我想使用 SwiftUI 将一个视图替换为另一个视图。

目前我使用 NavigationView 或 .sheet 来转换到新视图,并且可以很好地堆叠视图。

但是我还没有找到一种方法可以用另一个视图完全替换一个视图。例如,当用户首次登陆应用程序时,它将提供登录或创建新帐户的选项。我想要任何一个选项来替换以前的视图,而不是出现在它上面。另一个例子是当用户退出应用程序时。我想关闭我的整个堆栈并替换为登录屏幕。不只是忽略所有重叠视图。

与 pre swiftUI 的类比是替换 rootView。

【问题讨论】:

    标签: ios swiftui


    【解决方案1】:

    您只需在根视图中有条件地显示每个视图

    var body: some View {
       if isLoggedIn {
          HomeView()
       } else {
          LoginView() {
       }
    }
    

    【讨论】:

    • 路径将由用户输入确定。例如,用户将按下一个按钮来选择创建帐户或注册。那时我是 dong .fullScreenCover 来显示下一个视图。但如果可以的话,我想关闭原始根视图。
    • @alionthego,原则是不要解雇根。相反,根视图包含登录/注册流程(在我的示例中为LoginView)和用户登录后出现的应用程序视图(HomeView)。在LoginView 中,您可以让用户选择是登录还是注册。用户登录后,isLoggedIn(或任何其他状态)发生更改,根视图从登录/注册屏幕更改为主屏幕
    • 是的,我明白这一点。以前虽然可以更改 rootViewController,这样您就不会将视图堆叠在您将不再使用的其他视图之上。上面的用户登录只是一个例子。另一个可能是用户退出应用程序。以前,通常会忽略先前的根视图,该根视图摆脱了其他所有内容。但现在它接缝你必须解雇堆栈元素。如果没有固有的方法来关闭应用程序的根视图,我想我将不得不调整我的思维方式。
    • @alionthego,也没有理由关闭根视图。在 SwiftUI 中嵌套视图非常便宜。 SwiftUI 中的每个视图修饰符都会返回一个包装视图。视图只是描述视图层次结构的轻量级结构,而不是视图控制器的集合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2021-04-15
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多