首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI: ViewModifier与其支持的视图不同步

SwiftUI: ViewModifier与其支持的视图不同步
EN

Stack Overflow用户
提问于 2021-02-03 08:47:15
回答 1查看 213关注 0票数 1

我有一个简单的SwiftUI视图,它有一个StateObject,我为该视图创建了一个ViewModifier,并在视图修饰符中添加了一个onReceive事件,以侦听主视图(MyView)中的更改,如下所示:

代码语言:javascript
复制
class MyViewModel: ObservableObject {
    @Published var myProperty: Bool = false
}

struct MyView: View {
    @StateObject var myViewModel = MyViewModel()
    
    var body: some View {
        Text("Hello, world!")
            .padding()
            .modifier(MyViewModifier(myViewModel: myViewModel))
            .onTapGesture {
                myViewModel.myProperty = true
            }
    }
}

struct MyViewModifier: ViewModifier {
    @ObservedObject var myViewModel: MyViewModel
    
    func body(content: Content) -> some View {
        content
            .onReceive(myViewModel.$myProperty, perform: { newValue in
                print("new value for myProperty is \(newValue)")
            })
    }
}

但是,当我点击文本"Hello“时,onReceive修饰符不会在MyViewModifier中触发,我尝试的是:

MyView.

  • Changing中的
  1. StateObject更改为ObservedObjectObservedObject中将ObservedObject更改为MyViewModifier中的Binding,但无法找到将整个StateObject的绑定从MyView传递到MyViewModifier.

的方法

上述任何一项都没有解决这个问题。

- note:我需要将整个视图模型对象向下传递给MyViewModifier,因为这是来自一个大型项目的一个小示例,它需要整个视图模型对象在视图修饰符中可用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-03 09:21:17

使用onChange(of:perform:)

为此视图添加了一个修饰符,该修饰符在特定值更改时触发操作。https://developer.apple.com

代码语言:javascript
复制
onChange(of: myViewModel.myProperty) { value in
    print("Value \(value)")
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66024018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档