我为设置菜单创建了一个列表,其中包含两个部分,您可以在其中重新排序/添加/删除一组页面。它的工作方式类似于Apple的Today Widget编辑菜单,您可以在其中添加和重新排序项目。这是我的代码:
连接器类代码段:
enum DetailsPage {
case page1
case page2
case page3
func printed() -> String {
switch self {
case .page1:
return "Page 1"
case .page2:
return "Page 2"
case .page3:
return "Page 3"
}
}
}
@Published var detailsPages: [DetailsPage] = [.page1, .page2]
@Published var hiddenDetailsPages: [DetailsPage] = [.page3]
SwiftUI代码段:
List {
Section {
ForEach(self.connector.detailsPages, id: \.self) { page in
HStack(spacing: 0) {
Text("\(page.printed())")
Spacer()
}
}
.onMove { (source, destination) in
self.connector.detailsPages.move(fromOffsets: source, toOffset: destination)
}
.onDelete { (rows) in
rows.forEach { (i) in
let page: SettingsConnector.DetailsPage = self.connector.detailsPages[i]
self.connector.detailsPages.remove(at: i)
self.connector.hiddenDetailsPages.insert(page, at: 0)
}
}
}
Section {
ForEach(self.connector.hiddenDetailsPages, id: \.self) { page in
HStack(spacing: 0) {
Image(systemName: "plus.circle.fill")
.foregroundColor(.green)
.padding(.horizontal, 5)
Text("Add \(page.printed())")
.padding(.horizontal, 5)
Spacer()
}
}
}
}
当我删除第一部分上的页面时,它确实出现在hiddenDetailsPages部分中。
但是,即使各部分之间没有直接关系,单元格视图也只是移至第二部分,而是使用第一部分中的绘图代码。 即使该单元格出现在第二部分中,也不会使用第二部分中的绘图指令。
我是不是完全出错了,或者这是SwiftUI中的错误?