Ios 更新UIViewRepresentable中的绑定
我有一个swiftUI视图,它调用UIViewRepresentable视图。在SwiftUI视图中,我切换@state布尔值的状态 在我的UIViewRepresentable视图中,我创建了一个从主SwiftUI视图获得的绑定。问题是绑定从未得到更新,或者至少在UIViewRepresentable视图中没有调用updateView函数。我觉得我一定是做错了什么,但我只是忽视了它。下面是我正在尝试做的一个例子Ios 更新UIViewRepresentable中的绑定,ios,swiftui,Ios,Swiftui,我有一个swiftUI视图,它调用UIViewRepresentable视图。在SwiftUI视图中,我切换@state布尔值的状态 在我的UIViewRepresentable视图中,我创建了一个从主SwiftUI视图获得的绑定。问题是绑定从未得到更新,或者至少在UIViewRepresentable视图中没有调用updateView函数。我觉得我一定是做错了什么,但我只是忽视了它。下面是我正在尝试做的一个例子 import Foundation import SwiftUI st
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=!状态
谢谢,我没有想到要尝试这个。我以为绑定会自动调用updateUIView。但正如你所说,SwiftUI肯定比引擎盖下的更智能。