SwiftUI View 的手动更新

问题描述 投票:0回答:2

传统上,SwiftUI 应用程序会自动更新其视图以响应任何状态更改。当 @State propertyWrapper 检测到任何更新时,就会发生这种情况。我很好奇,是否可以手动重绘 SwiftUI 视图,而不是依赖@State 数据绑定技术?

ios swift data-binding swiftui
2个回答
12
投票

您可以使用一个

ObservableObject
对象作为模型,然后调用
objectWillChange.send()
触发刷新

struct MyView : View {
    @ObservedObject var model: Model
    var body: some View { .. }
}

class Model: ObservableObject { 
    func reloadView() {
        objectWillChange.send()
    } 
}

0
投票

也许这让 Sorin 的伟大答案更容易理解。

1 — 把它放在你的 Extensions.swift 中(或者任何地方,真的)

class ReloadViewHelper: ObservableObject {
    func reloadView() {
        objectWillChange.send()
    }
}

2 — 然后在没有更新的类中,添加这个变量。

@ObservedObject var reloadViewHelper = ReloadViewHelper()

3 — 然后当您希望更新整个视图时,只需调用:

reloadViewHelper.reloadView()

或者像这样

Button(action: { reloadViewHelper.reloadView() } ) {
    Text("Update View")
}
© www.soinside.com 2019 - 2024. All rights reserved.