在SwiftUI中,你可以使用onDelete()
方法从列表中删除项目。下面是完整的答案:
要在SwiftUI中从另一个视图中删除列表中的一项,可以按照以下步骤进行操作:
List
视图来显示项目列表,并在每个项目上添加onDelete()
修饰符。onDelete()
修饰符会创建一个可编辑的列表,允许用户通过滑动或在编辑模式下点击删除按钮来删除项目。struct ContentView: View {
@State private var items = ["Item 1", "Item 2", "Item 3"]
var body: some View {
NavigationView {
List {
ForEach(items, id: \.self) { item in
Text(item)
}
.onDelete(perform: deleteItem)
}
.navigationBarItems(trailing: EditButton())
}
}
private func deleteItem(at offsets: IndexSet) {
items.remove(atOffsets: offsets)
}
}
在上述示例中,我们使用@State
属性包装器来创建一个状态变量items
,其中包含要显示的项目列表。List
视图使用onDelete(perform:)
修饰符将deleteItem
方法与删除操作关联起来。deleteItem
方法使用offsets
参数指定要删除的项目的索引,然后通过调用items.remove(atOffsets:)
来删除相应的项目。
struct ContentView: View {
@State private var items = ["Item 1", "Item 2", "Item 3"]
@State private var isShowingDetailView = false
var body: some View {
NavigationView {
VStack {
List {
ForEach(items, id: \.self) { item in
Text(item)
}
.onDelete(perform: deleteItem)
}
NavigationLink(destination: DetailView(items: $items), isActive: $isShowingDetailView) {
Text("Open Detail View")
}
}
.navigationBarItems(trailing: EditButton())
}
}
private func deleteItem(at offsets: IndexSet) {
items.remove(atOffsets: offsets)
}
}
struct DetailView: View {
@Binding var items: [String]
var body: some View {
VStack {
Text("Detail View")
Button("Delete Item") {
items.removeLast()
}
}
}
}
在上述示例中,我们创建了一个名为DetailView
的视图,其中包含一个按钮,用于删除列表中的最后一项。DetailView
视图使用@Binding
属性包装器来获取items
变量的引用,这样在删除最后一项时,列表视图也会更新。
在ContentView
视图中,我们创建了一个名为isShowingDetailView
的布尔值状态变量,用于控制是否显示DetailView
视图。使用NavigationLink
视图,我们可以将isShowingDetailView
与DetailView
关联起来,并在点击按钮时设置为true
,从而在导航到DetailView
视图时显示它。
领取专属 10元无门槛券
手把手带您无忧上云