如何在SwiftUI的ForEach中对Section项执行onDelete



在一个全新的项目中,我有以下代码用于测试:

extension Int: Identifiable {

public var id: UUID { UUID() }
}
struct ContentView: View {

let data: [Int] = [1, 2, 3, 4, 5]

var body: some View {
List {
ForEach(data) {
Section(header: Text("($0)")) {
ForEach(data) {
Text("($0)")
}.onDelete(perform: { indexSet in
print("Delete (indexSet)")
})
}
}
}
}
}

在这种情况下,没有滑动删除这样的操作。默认情况下,你可以在输入onDelete到ForEach后滑动并看到删除按钮。但当你在ForEach中放置Section时,这不会发生。它会在我移除Section时出现。即使我在ForEach中有ForEach,它仍然可以工作。但是没有Section在里面,为什么?

Xcode 12.4斯威夫特5

您只需要提供一个数组的数组,其中包含每个部分的行:

struct ContentView: View {
@State var data: [[Int]] = [[1, 2, 3, 4, 5],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5]]
var body: some View {
List {
ForEach(data.indices, id: .self) { section in
Section(header: Text("(section+1)")) {
ForEach(data[section], id: .self) { row in
Text("(row)")
}.onDelete(perform: { indexSet in
data[section].remove(atOffsets: indexSet)
})
}
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新