gpt4 book ai didi

list - 如何使用 NavigationLink 编辑列表中的项目?

转载 作者:行者123 更新时间:2023-12-04 00:02:11 30 4
gpt4 key购买 nike

我正在寻找有关 SwiftUI 的一些指导。

我有一个显示一个简单列表的 View ,每行显示一个“名称”字符串。您可以通过单击尾随导航栏按钮将项目添加到数组/列表中。这工作正常。我现在想使用 NavigationLink 来呈现一个新的“DetailView”,我可以在其中编辑行的“名称”字符串。我正在努力解决如何在详细 View 中使用绑定(bind)来更新名称。

我在网上找到了大量关于如何在新 View 中呈现数据的教程,但没有关于如何编辑数据的教程。
提前致谢。

内容 View :

struct ListItem: Identifiable {
let id = UUID()
let name: String
}

class MyListClass: ObservableObject {
@Published var items = [ListItem]()
}

struct ContentView: View {

@ObservedObject var myList = MyListClass()

var body: some View {
NavigationView {
List {
ForEach(myList.items) { item in
NavigationLink(destination: DetailView(item: item)) {
Text(item.name)
}
}
}
.navigationBarItems(trailing:
Button(action: {
let item = ListItem(name: "Test")
self.myList.items.append(item)
}) {
Image(systemName: "plus")
}
)
}
}
}

详细 View
struct DetailView: View {

var item: ListItem

var body: some View {
TextField("", text: item.name)
}
}

最佳答案

您传入 DetailsView 的主要思想不是被复制的项目,因为它是一个值,而是绑定(bind)到 View 模型中的相应项目。

这是一个演示,修改了您的代码快照以实现请求的行为:

struct ListItem: Identifiable, Equatable {
var id = UUID()
var name: String
}

class MyListClass: ObservableObject {
@Published var items = [ListItem]()
}

struct ContentView: View {

@ObservedObject var myList = MyListClass()

var body: some View {
NavigationView {
List {
ForEach(myList.items) { item in
// Pass binding to item into DetailsView
NavigationLink(destination: DetailView(item: self.$myList.items[self.myList.items.firstIndex(of: item)!])) {
Text(item.name)
}
}
}
.navigationBarItems(trailing:
Button(action: {
let item = ListItem(name: "Test")
self.myList.items.append(item)
}) {
Image(systemName: "plus")
}
)
}
}
}

struct DetailView: View {

@Binding var item: ListItem

var body: some View {
TextField("", text: self.$item.name)
}
}

关于list - 如何使用 NavigationLink 编辑列表中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58997248/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com