如何使用@EnviromentObject 在视图之间绑定数据?
How to bind data between views using @EnviromentObject?
我正在通过制作一个简单的练习应用程序来练习如何使用@EnvironmentObject 绑定数据。该应用程序的主视图是一个简单的列表,每个单元格中都有一个标题。通过单击单元格,它将显示详细信息视图。在详细视图中是一个 TextField,它可以更改主视图中单元格的标题。我不知道如何将 textField 与单元格的标题绑定。
您可以将 ContentView
中的 ForEach
循环替换为:
// iterate through indices of the `store.items` array
ForEach(0..<store.items.count, id:\.self) { index in
// pass the `index` to the `DetailView`
NavigationLink(destination: DetailView(index: index)) {
Text(self.store.items[index].title)
}
}
然后使用 DetailView
中的 index
从 @EnvironmentObject
访问绑定:
struct DetailView: View {
@EnvironmentObject var store: CPStore
// item index
let index: Int
var body: some View {
VStack {
// now you can access the item binding
TextField("New title", text: $store.items[index].title)
.padding(5)
.frame(height: 50)
.overlay(Rectangle().stroke(Color.gray, lineWidth: 2))
Spacer()
}
}
}
我正在通过制作一个简单的练习应用程序来练习如何使用@EnvironmentObject 绑定数据。该应用程序的主视图是一个简单的列表,每个单元格中都有一个标题。通过单击单元格,它将显示详细信息视图。在详细视图中是一个 TextField,它可以更改主视图中单元格的标题。我不知道如何将 textField 与单元格的标题绑定。
您可以将 ContentView
中的 ForEach
循环替换为:
// iterate through indices of the `store.items` array
ForEach(0..<store.items.count, id:\.self) { index in
// pass the `index` to the `DetailView`
NavigationLink(destination: DetailView(index: index)) {
Text(self.store.items[index].title)
}
}
然后使用 DetailView
中的 index
从 @EnvironmentObject
访问绑定:
struct DetailView: View {
@EnvironmentObject var store: CPStore
// item index
let index: Int
var body: some View {
VStack {
// now you can access the item binding
TextField("New title", text: $store.items[index].title)
.padding(5)
.frame(height: 50)
.overlay(Rectangle().stroke(Color.gray, lineWidth: 2))
Spacer()
}
}
}