作为更大表单的一部分,我希望有一个带有列表的部分,其条目可以重新排序。
在整个视图中,应该只能编辑该特定列表,而不能编辑其他内容。因此我希望将编辑按钮放在列表附近。
如果我只是将 EditButton 设置为节标题,则可以对列表项重新排序,但无法显示节标题:
struct ContentView: View {
private let items = Range(1...4).map { "Item " + String($0) }
var body: some View {
Form {
Section(header: EditButton()) {
ForEach(items, id: \.self) { item in
Text(item)
}
.onMove(perform: reorderItems)
.onDelete(perform: deleteItems)
}
}
}
func reorderItems(from sourceIndices: IndexSet, to destinationIndex: Int) { /* ... */ }
func deleteItems(at offsets: IndexSet) { /* ... */ }
}
但是,如果我将 EditButton 包装在 HStack 中以在右侧显示按钮,则点击“编辑”会将按钮的标题更改为“完成”,但不再启动列表的编辑模式:
struct ContentView: View {
@Environment(\.editMode) var editMode
private let items = Range(1...4).map { "Item " + String($0) }
var body: some View {
Form {
Section(header: HStack {
Text("Section title")
Spacer()
EditButton()
}.environment(\.editMode, self.editMode)) {
ForEach(items, id: \.self) { item in
Text(item)
}
.onMove(perform: reorderItems)
.onDelete(perform: deleteItems)
}
}
}
func reorderItems(from sourceIndices: IndexSet, to destinationIndex: Int) { /* ... */ }
func deleteItems(at offsets: IndexSet) { /* ... */ }
}
正如代码所示,我还尝试将 editMode 环境变量传递给 HStack,但没有任何帮助。
有什么方法可以让 HStack 中的 EditButton 工作吗?
(备注:由于列表是更大表单的一部分,因此请按照建议将编辑按钮放在部分之外here https://stackoverflow.com/questions/59851275/swiftui-editbutton-does-not-trigger-ondelete-when-embedded-within-an-hstack-sec在我的情况下不是一个选择。)