我有一个swiftUI视图,它调用一个UIViewRepresentable视图。在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)
}
}
}我正在使用Xcode 12.5和Swift 5.4
发布于 2021-05-13 01:31:02
看起来SwiftUI正在做一些对我们来说不太明显的聪明的事情。因为您实际上没有在updateUIView中使用绑定,所以它实际上没有被调用。
但是,如果将代码更新为以下内容:
func updateUIView(_ uiView: UIViewType, context: Context) {
print("Hello \(status)")
}然后你会发现,事实上,它是被调用的。
PS -您可以使用status.toggle()而不是status = !status。
https://stackoverflow.com/questions/67512738
复制相似问题