【问题标题】:SwiftUI TabView not updating ViewSwiftUI TabView 不更新视图
【发布时间】:2020-08-24 16:28:38
【问题描述】:

我的问题是 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 的顶部

【问题讨论】:

  • 你在哪里修改“用户令牌”属性?

标签: ios swift swiftui userdefaults swiftui-tabview


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 2021-11-17
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      相关资源
      最近更新 更多