SwiftUI TabView不更新视图

时间:2020-08-24 16:28:38

标签: ios swift swiftui userdefaults swiftui-tabview

我的问题是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)
            }
        }
    }
    
}

我尝试过的事情:

  • 在两个屏幕上传递不同的@State值
  • LoginScreen中的呈现配置文件屏幕,但呈现在TabView顶部

2 个答案:

答案 0 :(得分:1)

如果您使用的是最新的SwiftUI,请考虑使用@AppStorage而不是@State:

@AppStorage("UserToken") var userToken: String = ""

答案 1 :(得分:0)

如果您要在其他任何视图中修改userToken的值(例如,可能是LoginView),则需要一种机制来告知内容视图该更新。

您可以考虑在此处使用LocalNotifications将更新发送到ContentView,以便在状态更新时重新加载视图。