繁体   English   中英

更新 UIViewRepresentable 中的绑定

[英]Update Binding in UIViewRepresentable

我有一个调用 UIViewRepresentable 视图的 swiftUI 视图。 在 SwiftUI 视图中,我正在切换 @State boolean 值的 state。

在我的 UIViewRepresentable 视图中,我创建了一个从主 SwiftUI 视图过去的绑定。 问题是绑定永远不会更新,或者至少在 UIViewRepresentable 视图中没有调用 updateView function。 我觉得我一定做错了什么,但我只是忽略了它。 这是我正在尝试做的一个例子。

  import Foundation
  import SwiftUI

 struct BindingTest: UIViewRepresentable {

@Binding var status: Bool


func makeUIView(context: Context) -> UIActivityIndicatorView {
    
    let activityIndicator = UIActivityIndicatorView()
    
    activityIndicator.style = .large
    
    return activityIndicator
}

func updateUIView(_ uiView: UIViewType, context: Context) {
    
    
    print("Hello")
    
}

}



 import SwiftUI

 struct ChartView: View {

@State var status = false

var body: some View {

    
    VStack{
        
        Spacer()
    
    Button(action: {
        
       status = !status
        
    }) {
        
        Text("Change")
        
    }

    BindingTest(status: $status)
    
    
        
    }
}
}

我正在使用 Xcode 12.5 和 Swift 5.4

看起来 SwiftUI 在幕后做了一些对我们来说并不明显的聪明。 因为您实际上并没有在updateUIView使用您的绑定,所以它实际上并没有被调用。

但是,如果您将代码更新为以下内容:

func updateUIView(_ uiView: UIViewType, context: Context) {
  print("Hello \(status)")
}

然后你会看到它确实被调用了。

PS - 你可以使用status.toggle()而不是status = !status

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM