在SwiftUI中完成时更改视图

问题描述

我已经开发了一个视图,该视图管理三个子视图:loginregisterconfirm code

现在,我正在开发一个单独的视图,该视图在成功登录后管理所有子视图。这个想法是成功登录后,新的将被推送,而旧的将被弹出。

我在登录子视图中尝试过NavigationLink,但似乎不喜欢其余响应(即完成)中的isActive更改。

代码如下:

NavigationLink(
   destination: LoggedView(),isActive: self.$pushToLogged,label: {
                
   }
).hidden()
func login() {
    let lF = LoginServiceFacade()
    lF.loginMember(mobileNumber: mobileNumber,password: password,completion: {
        (response: LoginResponse?,error: ConnectionErrors?) in
            self.pushToLogged = true
    })
}

解决方法

这是一个可能的方式的简单且易于理解的示例:

首先提供一个包装视图,以检查您是否登录。显示相应的视图:

matplotlib.pyplot.ylabel()
matplotlib.pyplot.title()

然后拥有您的主视图,该视图可以具有所需的任何结构。我例如选择一个TabView:

struct ContentView: View {
    
    @State var isLoggedIn: Bool = false
    
    var body: some View {
        Group() {
            if self.isLoggedIn {
                Home(isLoggedIn: self.$isLoggedIn)
            } else {
                Login(isLoggedIn: self.$isLoggedIn)
            }
        }
    }
}

具有完成内容的登录视图:

struct Home: View {
    
    @Binding var isLoggedIn: Bool
    
    var body: some View {
        TabView {
            Example(subTitle: "First")
                .tabItem {
                    Image(systemName: "list.dash")
                    Text("First")
                }

            Example(subTitle: "Second")
                .tabItem {
                    Image(systemName: "square.and.pencil")
                    Text("Second")
                }
        }
    }
}

struct Example: View {
    
    @State var subTitle: String
    
    var body: some View {
        Text("Hello World \(self.subTitle)")
    }
}

这将产生以下示例:

Example as gif