【发布时间】:2020-11-04 08:39:28
【问题描述】:
我制作了一个练习应用,其中主视图是一个简单的列表。当点击列表的项目时,它会显示详细视图。详细视图内部是一个“删除”按钮,用于删除项目。
如何从详细视图中删除每个项目?
主视图:
struct ContentView: View {
@EnvironmentObject var viewModel: ViewModel
var body: some View {
NavigationView {
List {
ForEach(0 ..< viewModel.items.count, id: \.self) { index in
NavigationLink(destination: DetailView()) {
Text(self.viewModel.items[index].title)
}
}
}
.navigationBarTitle("Practice")
.navigationBarItems(trailing: Button(action: makeNew) {
Text("Add")
})
}
}
func makeNew() {
withAnimation {
viewModel.items.append(Model(title: "New Item \(viewModel.items.count + 1)"))
}
}
}
详细视图:
struct DetailView: View {
@EnvironmentObject var viewModel: ViewModel
var body: some View {
Button(action: remove) {
Text("Delete")
}
}
func remove(at offsets: IndexSet) {
withAnimation {
viewModel.items.remove(atOffsets: offsets)
}
}
}
模型:
struct Model: Identifiable {
var id = UUID()
var title: String
}
和 ViewModel:
class ViewModel: ObservableObject {
@Published var items = [Model]()
}
【问题讨论】: