ios - 在 SwiftUI 中更改完成视图
问题描述
我开发了一个管理三个子视图的视图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
})
}
解决方案
这是一个非常简单且易于理解的示例,说明了这样做的可能方式:
首先提供一个包装视图来检查您是否已登录。显示相应的视图:
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)
}
}
}
}
然后有你的主视图,它可以有你想要的任何结构。例如,我选择一个 TabView:
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)")
}
}
完成后的登录视图:
struct Login: View {
@Binding var isLoggedIn: Bool
var myLogin: myLoginClass = myLoginClass()
var body: some View {
Button(action: {
self.myLogin.loginWithCompletion { isSucceeded in
if isSucceeded {
self.isLoggedIn.toggle()
}
}
}) {
Text("Log me in")
}
}
}
class myLoginClass {
// Completing method
// Here would be your code that would "complete" true if successfully logged in or false if error
// I'm just waiting to "simulate" the visual process
func loginWithCompletion(completion: @escaping (Bool) -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
completion(true)
}
}
}
这产生了这个例子:
推荐阅读
- javascript - Javascript计算器只返回未定义
- firebase - Redux 和 Firebase
- java - 在 android studio(JAVA) 或 org.json.JSON.typeMismatch / org.json.JSONException 错误中获取信息 API JSON
- javascript - 'ActionSheetIOS' 不是从'react-native-web/dist/index' 导出的
- c++ - 验证多态向量元素的具体类型是相同的
- arrays - 如果它有超过 2 个索引,你如何打印一个数组?
- php - 用于计算器的 Smarty PHP(我使用 PHP OOP)
- java - 单选按钮的时间和倒计时(秒)事件处理程序
- memory-management - 如何找到某物的内存位置
- express - 为什么只有在我的应用程序处于生产状态时才会出现此错误?