我现在有一个带有List的NavigationView,它使用ForEach循环来显示存储在数组中的一些对象的列表,这些对象附加到NavigationLink的数组中。当用户单击其中一个对象的链接时,他们可以编辑链接中对象的一些属性。然而,当他们试图编辑属性时,属性要么在键入时保持不变,要么在键入时保持不变。或者它把用户踢回NavigationView。我做错了什么?
子视图将对象作为绑定接收,子视图中的TextField也使用绑定来编辑属性。
我已经创建了一个精简版的一切,显示的问题,使它更快地阅读。
对象结构
struct Person: Hashable {
var name: String
var number: String
}
导航视图
struct ContentView: View {
@State var people: [Person] = testPeople // this contains a few instances of Person
var body: some View {
VStack {
NavigationView {
List {
ForEach($people, id: \.self) { $person in
NavigationLink(destination: PersonView(person: $person)) {
Text(person.name)
}
}
}
}
}
}
}
导航链接
struct PersonView: View {
@Binding var person: Person
var body: some View {
VStack {
Text(person.name)
TextField("number", text: $person.number) // this text field allows the user to edit the number property
}
}
}
1条答案
按热度按时间8mmmxcuj1#
当在
PersonView
上更新该编号时,它将更新ContentView
中的Person
,从而导致刷新视图。可以通过在
people.indices
上执行ForEach
来解决此问题,如下所示:我不知道为什么会这样,但就是这样!