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 на оба экрана
- Отображение экрана профиля в Login Screen, но он отображается поверх TabView
2 ответа
Если вы используете последнюю версию SwiftUI, рассмотрите возможность использования @AppStorage вместо @State:
@AppStorage("UserToken") var userToken: String = ""
Если вы изменяете значение userToken в любом другом представлении, например может быть LoginView, вам нужен механизм, чтобы информировать представление содержимого об этом обновлении.
Вы можете рассмотреть возможность использования LocalNotifications здесь для отправки обновления ContentView, чтобы представление перезагружалось при обновлении статуса.