[英]How do I refresh View in SwiftUI
I have an app with log in screen.我有一个带有登录屏幕的应用程序。 It has to 3 tabs.
它有 3 个标签。 Once the app loads it loads a log in tab.
应用程序加载后,它会加载一个登录选项卡。 But once the credentials are hit and the if statement turns to true it doesn't show the other tabs.
但是,一旦凭据被命中并且 if 语句变为 true,它就不会显示其他选项卡。 I would like to know how to refresh the view once the conditional turns to true.
我想知道一旦条件变为真如何刷新视图。
ViewConsole视图控制台
import SwiftUI
var verify = false
struct ViewConsole: View {
var body: some View {
if verify == true {
TabView{
ContentView()
.tabItem {
Label("Names", systemImage: "person.3")
}
AdminView()
.tabItem{
Label("Admin", systemImage: "gear")
}
}
} else {
LoginView()
.tabItem{
Label("Log In", systemImage: "key")
}
}
}
}
struct ViewConsole_Previews: PreviewProvider {
static var previews: some View {
ViewConsole()
.environmentObject(Admin())
}
}
App Delegate应用代理
import SwiftUI
@main
struct Work_Tracker_For_KumonApp: App {
@StateObject var admin = Admin()
var body: some Scene {
WindowGroup {
ViewConsole()
.environmentObject(admin)
}
}
}
You aren't going to want verify
to be a global variable.您不会希望
verify
成为全局变量。 One way to do it would be to add a @State
property to your ViewConsole
.一种方法是将
@State
属性添加到您的ViewConsole
。 To have access to it in your LoginView
, you can pass a Binding to it using the $
symbol.要在
LoginView
中访问它,您可以使用$
符号将 Binding 传递给它。
struct ViewConsole: View {
@State private var verify = false
var body: some View {
if verify {
TabView {
Text("Content")
.tabItem {
Label("Names", systemImage:
"person.3")
}
Text("Admin")
.tabItem{
Label("Admin", systemImage:
"gear")
}
}
} else {
LoginView(verify: $verify)
.tabItem{
Label("Log In", systemImage:
"key")
}
}
}
}
struct LoginView : View {
@Binding var verify : Bool
var body: some View {
Button(action: {
verify = true
}) {
Text("Verify")
}
}
}
A second way to approach this would be to use an ObservableObject
with a @Published
property.解决此问题的第二种方法是使用带有
@Published
属性的ObservableObject
。 It looks like you already have one called Admin
set up as a environmentObject
.看起来您已经将一个名为
Admin
设置为environmentObject
。 It might look something like this:它可能看起来像这样:
class Admin : ObservableObject {
@Published var loggedIn = false
}
struct ViewConsole: View {
@EnvironmentObject var admin : Admin
var body: some View {
if admin.loggedIn {
TabView {
Text("Content")
.tabItem {
Label("Names", systemImage:
"person.3")
}
Text("Admin")
.tabItem{
Label("Admin", systemImage:
"gear")
}
}
} else {
LoginView()
.tabItem{
Label("Log In", systemImage:
"key")
}
}
}
}
struct LoginView : View {
@EnvironmentObject var admin : Admin
var body: some View {
Button(action: {
admin.loggedIn = true
}) {
Text("Verify")
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.