问题描述
我的项目中有以下代码
@State private var selectedGenreID: Int64? = 0
@FetchRequest(entity: Genres.entity(),sortDescriptors: [NSSortDescriptor(key: "genName",ascending: true,selector: #selector(Nsstring.localizedStandardCompare))])
var genres: FetchedResults<Genres>
var body: some View {
List(genres,id: \Genres.genID,selection: $selectedGenreID,rowContent: { genre in
NavigationLink(genre.genName!,destination: GenreView(isNew: false,genre: genre))
})
.navigationBarTitle("Žánry")
.navigationBarItems(trailing: NavigationLink(destination: GenreView(isNew: true),label: {Image(systemName: "plus.circle")}))
}
我想知道如何为列表中的每一行实现滑动以删除功能。我知道它应该通过 .onDelete 修饰符,但我不知道如何申请如上构造的 List。如果 List 是通过 ForEach 创建的,它就可以工作。 谢谢。
解决方法
在列表中使用 ForEach 有什么问题?您只能将 .onDelete 修饰符与 ForEach 一起使用。在你的例子中(一个没有 ForEach 的列表)一个包含所有导航链接的单元格的列表,在你的情况下应该用 .onDelete 删除什么?
像这样:
List {
ForEach(genres,id:\Genres.genID) { genre in // here I don't know what your Genres.ID is so could be mistake
NavigationLink(destination: GenreView(isNew: false,genre: genre)) {
Text("\(genre.genName!)")
}.simultaneousGesture(TapGesture().onEnded{
// save selected id if you need
})
}.onDelete(perform: // your onDelete action here)
}
,
我终于做到了
List {
ForEach(genres,id:\Genres.genID) { genre in
NavigationLink(destination: GenreView(isNew: false,genre: genre)) {
Text("\(genre.genName!)")
}
}
.onDelete(perform: { indexes in
for index in indexes {
let genre = genres[index]
//Handling of deletion
}
})
}