如何删除列表中的NavigationLink

我的项目中有以下代码

@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 创建的,它就可以工作。 谢谢。

wangyirenhaha 回答:如何删除列表中的NavigationLink

在列表中使用 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
            }
        })
}
本文链接:https://www.f2er.com/1014535.html

大家都在问