我有一个调用 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
看起来 SwiftUI 在幕后做了一些聪明的事情,但我们并没有立即意识到。因为您实际上并未使用in 中的绑定updateUIView,所以实际上并未调用它。
但是,如果您将代码更新为以下内容:
func updateUIView(_ uiView: UIViewType, context: Context) {
print("Hello \(status)")
}
Run Code Online (Sandbox Code Playgroud)
然后你会发现它确实被调用了。
PS - 你可以status.toggle()使用status = !status
| 归档时间: |
|
| 查看次数: |
2086 次 |
| 最近记录: |