问题描述
我已经开发了一个视图,该视图管理三个子视图:login
,register
和confirm 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)")
}
}
这将产生以下示例: