首页 > 解决方案 > 用户每次在 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()
    }

标签: swiftswiftuistatepage-refreshpull-to-refresh

解决方案


推荐阅读