我的问题是TabView没有更新。
我要登录,然后重新渲染另一个视图(“配置文件”屏幕)而不是同一TabItem
中的“登录屏幕”。
TabView
仅在我杀死应用并重新打开后才进入ProfileScreen
。
这是TabView
代码:
import SwiftUI
struct ContentView: View {
@State var userToken: String = UserDefaults.standard.string(forKey: "UserToken") ?? ""
var body: some View {
TabView{
HomeScreen(text: .constant("")).tabItem({ Image(systemName: "house") }).tag(0)
Text("Cart").tabItem({ Image(systemName: "cart") }).tag(1)
if userToken.isEmpty {
LoginScreen().tabItem({ Image(systemName: "person") }).tag(2)
}
else {
ProfileScreen().tabItem({ Image(systemName: "person") }).tag(2)
}
}
}
}
我尝试过的事情:
答案 0 :(得分:1)
如果您使用的是最新的SwiftUI,请考虑使用@AppStorage而不是@State:
@AppStorage("UserToken") var userToken: String = ""
答案 1 :(得分:0)
如果您要在其他任何视图中修改userToken的值(例如,可能是LoginView),则需要一种机制来告知内容视图该更新。
您可以考虑在此处使用LocalNotifications将更新发送到ContentView,以便在状态更新时重新加载视图。