gpt4 book ai didi

ios - 更新@State后未调用SwiftUI UIViewControllerRepresentable.updateUIViewController

转载 作者:行者123 更新时间:2023-12-01 16:06:40 26 4
gpt4 key购买 nike

我正在尝试更改 UIViewControllerRepresentable@State并注意到 updateUIViewController(_ uiViewController:context:)在我这样做之后没有被调用。

我很难知道这是一个错误还是我做错了什么。

例如:

struct ContentView: UIViewControllerRepresentable {
@State var blah: Int = 0

func makeUIViewController(context: UIViewControllerRepresentableContext<ContentView>) -> UIViewController {
let vc = UIViewController()
let button = UIButton(frame: CGRect(x: 40, y: 40, width: 100, height: 100))
button.setTitle("Next", for: .normal)
button.addTarget(context.coordinator, action: #selector(context.coordinator.nextPressed), for: .primaryActionTriggered)
vc.view.addSubview(button)
return vc
}

func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<ContentView>) {
// Not being called when `blah` is updated.
var random = SystemRandomNumberGenerator()
let red = CGFloat(Double(random.next() % 255) / 255.0)
let blue = CGFloat(Double(random.next() % 255) / 255.0)
let green = CGFloat(Double(random.next() % 255) / 255.0)
uiViewController.view.backgroundColor = UIColor(red: red, green: green, blue: blue, alpha: 1)
}


func makeCoordinator() -> ContentView.Coordinator {
return Coordinator(self)
}


final class Coordinator {
var contentView: ContentView
init(_ contentView: ContentView) {
self.contentView = contentView
}

@objc func nextPressed() {
// This is getting called.
contentView.blah += 1
}
}
}

我希望看到 viewController 的背景发生变化,但是我没有看到 updateUIViewControllerblah 时被调用已更新。

我也尝试过传入绑定(bind)并使用 @ObservableObject .

谢谢!

最佳答案

您必须至少绑定(bind)一个值才能使 update只有绑定(bind)才能使 UIViewController 加入通知链。

如果使用@state,则为本地通知,无法触发update .

现在你可以@Binding var blah: Int看到大的变化。

关于ios - 更新@State后未调用SwiftUI UIViewControllerRepresentable.updateUIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58606745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com