首页 > 解决方案 > 如何删除列表中的 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 创建的,它就可以工作。谢谢。

标签: swiftswipe-gestureswiftui-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)
    }

推荐阅读