[英]How do I refresh View in SwiftUI
我有一個帶有登錄屏幕的應用程序。 它有 3 個標簽。 應用程序加載后,它會加載一個登錄選項卡。 但是,一旦憑據被命中並且 if 語句變為 true,它就不會顯示其他選項卡。 我想知道一旦條件變為真如何刷新視圖。
視圖控制台
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())
}
}
應用代理
import SwiftUI
@main
struct Work_Tracker_For_KumonApp: App {
@StateObject var admin = Admin()
var body: some Scene {
WindowGroup {
ViewConsole()
.environmentObject(admin)
}
}
}
您不會希望verify
成為全局變量。 一種方法是將@State
屬性添加到您的ViewConsole
。 要在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")
}
}
}
解決此問題的第二種方法是使用帶有@Published
屬性的ObservableObject
。 看起來您已經將一個名為Admin
設置為environmentObject
。 它可能看起來像這樣:
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.