问题描述
我想将变量从父级传递到子级视图,但是在此子级视图中,请在文本字段中使用该变量,但仅在按下SAVE按钮时才更新此值。
我尝试过:
ParentView
struct ParentView: View {
@State private var name: String = ""
var body: some View {
HStack {
Text("User name: \(name)")
Spacer()
NavigationLink(
destination: ChildView(name: name),label: {
Text("Update name")
}
)
}
}
}
ChildView
struct ChildView: View {
@State private var name: String = ""
@Binding var passedname: String
var body: some View {
vstack {
Form {
TextField("Update name",text: $name)
Button(action: {
passedname = name
},label: {
Text("SAVE")
})
}
}
}
init(name: String) {
self._passedname = .constant(name)
self.name = name
}
}
由于我不想直接更新变量,因此我尝试使用name
值,然后仅在轻按“确定”按钮时设置绑定的passedname
的值。但这不起作用。
我不知道该怎么做。
感谢您的帮助
解决方法
您的一般方法是正确的-具有一个状态变量来表示临时键入的名称,但是有一个绑定来表示名称“返回”给父级。
由于子级修改了父级拥有的数据,因此需要接受绑定-而不是简单的for item in data["people1"]:
if item["name"] == "William":
print(item["age"])
print(item["location"])
:
String
然后,传递父级的绑定:
struct ChildView: View {
@State private var name: String
@Binding var passedName: String
var body: some View {
VStack {
Form {
TextField("Update name",text: $name)
Button(action: {
passedName = name
},label: {
Text("SAVE")
})
}
}
}
init(name: Binding<String>) {
self._passedName = name
self._name = State(initialValue: name.wrappedValue)
}
}