我是 SwiftUI 新手。才几天努力学习。
我试图找到这方面的教程,但没有成功。
想象一下我有以下观点:
Struct MyPicker: View {
MyPicker
是在一个里面VStack
inside ContentView
。
我必须通过,从MyPicker
to ContentView
,3个参数:color
, width
and type
.
问题是这些值来自内部的委托回调MyPicker
。所以我内部必须有一个协调员MyPicker
.
struct MyPickerHelper: UIViewRepresentable {
class Coordinator:NSObject, MyPickerDelegate {
var color:UIColor
var width:CGFloat
var type:PKInkingTool.InkType
func toolPickerSelectedToolDidChange(_ toolPicker: PKToolPicker) {
if toolPicker.selectedTool is PKInkingTool {
let tool = toolPicker.selectedTool as! PKInkingTool
self.color = tool.color
self.width = tool.width
self.type = tool.inkType
}
}
有很多类似的东西@Binding
, @Published
, @State
等。我应该把什么放在哪里让 MyPicker 传达更改ContentView
?
您需要将状态作为父视图中的事实来源,并将其绑定传递到可表示视图中,这...这是一个参数的示例...
struct MyPicker: View {
@State private var color: UIColor = .clear // << source
var body: some View {
MyPickerHelper(color: $color) // << pass binding
}
}
现在有代表性的
struct MyPickerHelper: UIViewRepresentable {
@Binding var color: UIColor
func makeCoordinator() -> Coordinator {
Coordinator(owner: self)
}
...
class Coordinator:NSObject, MyPickerDelegate {
private var owner: MyPickerHelper
init(owner: MyPickerHelper) {
self.owner = owner
}
func toolPickerSelectedToolDidChange(_ toolPicker: PKToolPicker) {
if toolPicker.selectedTool is PKInkingTool {
let tool = toolPicker.selectedTool as! PKInkingTool
self.owner.color = tool.color // << here update via binding !!!
}
}
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)