swift - 用户每次在 SwiftUI 中输入时如何刷新视图的数据和 UI?
问题描述
我有一个包含五个 TabView 的 ContentView。
我想完成这样的功能......
用户每次点击 TabView 的不同选项卡,它应该在第一时间刷新(显示 loadingView 并初始化这个 TabView 的那些变量)。刷新视图后,视图的数据和 UI 将完美更新。
我尝试使用声明语言的特性,尝试通过更改状态变量(@State & @Binding)每次刷新视图。此外,我还尝试使用“.onAppear & .onDisAppear”来刷新这些视图。但是,它没有用。
有人可以给我一些建议吗?任何帮助将不胜感激。
这是我现在的代码:
内容视图
var body: some View {
TabView(selection: $selection) {
Personalization_View(isSelected: self.$selected)
.tabItem() {
Image(systemName: "person.crop.square")
}.onTapGesture {
self.selected.toggle()
}.tag(0) //index 1
WiFi_View()
.tabItem {
Image(systemName: "wifi")
}.tag(1) //index 2
Dashboard_View()
.tabItem {
Image(systemName: "house")
}.tag(2) //index 3
Networking_View()
.tabItem {
Image(systemName: "shield")
}.tag(3) // index 4
Management_View()
.tabItem {
Image(systemName: "wrench")
}.tag(4) //index 5
}.accentColor(.blue).padding(10)
}.present(isPresented: $firstSetup, goView: SetupPage(isAgree: $firstSetup)).navigationBarBackButtonHidden(true).hidden()
}
Personalization_View将显示一个表示服务器状态(开或关)的切换。因此,我需要刷新视图并显示正确的状态。
ps 我通过连接到设备(API 方式)来获取服务器的状态。
20 年 7 月 22 日 @Asperi 的解决方案:
我从我的 ViewModel(ObservableObject) 中删除了 init() 部分,并将代码添加到我的 Personaliztion_View .onAppear() 中。
Personaliztion_View 修改代码
@ObservedObject var updater: Personalization_ViewModel = Personalization_ViewModel()
VStack {
SOME CODE HERE
}.onAppear() {
self.updater.updateStatus()
}
解决方案
推荐阅读
- javascript - 在 PHP 预先生成 UI 时,通过单击按钮替换 UI
- java - 带有 JPA 实体的 Spring Boot Cacheable 注释
- python - 如何在 python 中使用日志功能?
- python - 无法使用 PyDrive 进行授权
- flutter - MissingPluginException 在通道颤振/平台视图上找不到方法创建的实现
- javascript - 使用 Emcscripten 编译 libsndfile
- javascript - setTimeout 在 useEffect 内部无限运行
- shell - 终端选项卡和终端会话(tmux)之间有区别吗?
- selenium-webdriver - 如何在 Robot Framework 中获取 Firefox devtools Network 选项卡条目?
- ios - Xcode - 该属性在此上下文中可能不可用