繁体   English   中英

在 SwiftUI 中的列表上实现删除功能

[英]Implementing a delete feature on a list in SwiftUI

我按照此文档(和文档)使用SwiftUI在应用程序中的列表中添加了删除功能。 两个页面都说,一旦您添加了.onDelete(perform: ...)代码段,您将能够滑动并获得一个删除按钮。 然而,这不是我所看到的。 代码可以编译,但我在滑动时什么也看不到。

我的列表由如下代码支持:

@FetchRequest(
    entity: ...,
    sortDescriptors: []
) var myList: FetchedResults<MyEntity>

而不是@State 这可能是一个问题吗?

下面是更多相关代码,以防万一这可能有用:

private func deleteSpot(at index: IndexSet) {
    print(#function)
}

.........

var body: some View {
    VStack {
        ForEach(self.myList, id: \.self.name) { item in
            HStack {
                Spacer()
                Button(action: {
                    self.showingDestinList.toggle()
                    .....
                    UserDefaults.standard.set(item.name!, forKey: "LocSpot")
                }) {
                    item.name.map(Text.init)
                        .font(.largeTitle)
                        .foregroundColor(.secondary)
                }
                Spacer()
            }
        }.onDelete(perform: deleteSpot)
    }

动态容器的滑动删除仅适用于List ,因此请制作

var body: some View {
    List {              // << here !!
        ForEach(self.myList, id: \.self.name) { item in
            HStack {

              // ... other code

            }
        }.onDelete(perform: deleteSpot)
    }
}

通过搜索和尝试各种选项,我最终找到了问题所在。 我觉得这个解决方案有些荒谬,但为了避免其他人浪费时间,这里是:

帖子中的最后一部分代码需要进行如下修改才能正常工作。

var body: some View {
    VStack {
      List {
        ForEach(self.myList, id: \.self.name) { item in
            HStack {
                Spacer()
                Button(action: {
                    self.showingDestinList.toggle()
                    .....
                    UserDefaults.standard.set(item.name!, forKey: "LocSpot")
                }) {
                    item.name.map(Text.init)
                        .font(.largeTitle)
                        .foregroundColor(.secondary)
                }
                Spacer()
            }
        }.onDelete(perform: deleteSpot)
      }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM