更新 UIViewRepresentable 中的绑定

kka*_*a41 5 ios swiftui

我有一个调用 UIViewRepresentable 视图的 swiftUI 视图。在 SwiftUI 视图中,我正在切换 @State 布尔值的状态。

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

  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)
    
    
        
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Xcode 12.5 和 Swift 5.4

jn_*_*pdx 5

看起来 SwiftUI 在幕后做了一些聪明的事情,但我们并没有立即意识到。因为您实际上并未使用in 中的绑定updateUIView,所以实际上并未调用它。

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

func updateUIView(_ uiView: UIViewType, context: Context) {
  print("Hello \(status)")
}
Run Code Online (Sandbox Code Playgroud)

然后你会发现它确实被调用了。

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