以编程方式导航到 SwiftUI 中的新视图 [英] Programmatically navigate to new view in SwiftUI
问题描述
描述性示例:
登录屏幕,用户点击登录"按钮,执行请求,UI显示等待指示器,然后在成功响应后我想自动将用户导航到下一个屏幕.
login screen, user taps "Login" button, request is performed, UI shows waiting indicator, then after successful response I'd like to automatically navigate user to the next screen.
如何在 SwiftUI 中实现这种自动转换?
How can I achieve such automatic transition in SwiftUI?
推荐答案
您可以在登录成功后用您的登录视图替换下一个视图.例如:
You can replace the next view with your login view after a successful login. For example:
struct LoginView: View {
var body: some View {
...
}
}
struct NextView: View {
var body: some View {
...
}
}
// Your starting view
struct ContentView: View {
@EnvironmentObject var userAuth: UserAuth
var body: some View {
if !userAuth.isLoggedin {
LoginView()
} else {
NextView()
}
}
}
您应该在您的数据模型中处理您的登录过程,并使用诸如 @EnvironmentObject
之类的绑定将 isLoggedin
传递给您的视图.
You should handle your login process in your data model and use bindings such as @EnvironmentObject
to pass isLoggedin
to your view.
注意:在 Xcode Version 11.0 beta 4 中,为了符合协议 'BindableObject',willChange 必须添加属性
Note: In Xcode Version 11.0 beta 4, to conform to protocol 'BindableObject' the willChange property has to be added
import Combine
class UserAuth: ObservableObject {
let didChange = PassthroughSubject<UserAuth,Never>()
// required to conform to protocol 'ObservableObject'
let willChange = PassthroughSubject<UserAuth,Never>()
func login() {
// login request... on success:
self.isLoggedin = true
}
var isLoggedin = false {
didSet {
didChange.send(self)
}
// willSet {
// willChange.send(self)
// }
}
}
这篇关于以编程方式导航到 SwiftUI 中的新视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!