下面的代码将handler
传递给ActionView
。处理程序应该执行一些操作,然后将输出写入TextEditor
。
我假设绑定变量output
应该从handler
内部访问,这怎么做呢?或者这是完全错误的方法吗?
struct ActionView: View {
struct Action {
let handler: ()->()
}
@State var output: String = "a\nb\nc"
let action: Action
var body: some View {
List {
Button(action: action.handler) {
Label("Action")
}
TextEditor(text: $output)
}
}
}
struct ActionView_Previews: PreviewProvider {
static var previews: some View {
let action = ActionView.Action(
handler: {
// Do something and write to $output
})
ActionView(actions: actions)
}
}
2条答案
按热度按时间w8rqjzmb1#
您可以定义Action处理程序以接受
Binding
参数,以便调用代码可以将@State
属性传递给操作。然后按钮操作可以传递属性
使用父视图中的视图的示例
jchrr9hc2#
您的CAN代码只需做一些小的改动就可以正常工作:
output
可以赋值的内容,最好是String。output
设置为等于操作处理程序的结果。ActionView
之外定义,以便父级可以使用它。以下是这些修改的实际效果:
然后可以在父对象中调用
ActionView
,如下所示: