采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
为啥我onDelete的代码可以正常运行,但是onMove在我拖动后又会恢复原来顺序?
Xcode15.4 更新了数据源 在预览界面移动也可能会恢复,用模拟器是正常的
有一点没有明白,应该怎么解决
onDelete 和 onMove 是 SwiftUI 中 List 视图的两个标准方法,用于处理列表项的删除和重新排序。你遇到的问题可能是因为你在 onMove 的实现中没有更新数据源,或者更新的数据源没有正确绑定到视图。
在 SwiftUI 中,List 的顺序是由其绑定的数据源决定的。如果你只是在 onMove 方法中处理了视图的更新(例如移动行),但没有同步更新你的数据源,那么数据源将会保持不变,并在视图重新渲染时恢复原来的顺序。
以下是一个基本的 onMove 示例,它展示了如何更新数据源以确保视图和数据源保持同步:
struct ContentView: View { @State private var items = ["Item 1", "Item 2", "Item 3"] var body: some View { NavigationView { List { ForEach(items, id: \.self) { item in Text(item) } .onMove(perform: move) .onDelete(perform: delete) } .navigationBarItems(trailing: EditButton()) } } func move(from source: IndexSet, to destination: Int) { items.move(fromOffsets: source, toOffset: destination) } func delete(at offsets: IndexSet) { items.remove(atOffsets: offsets) } }
在这个例子中,move(from:to:) 方法调用 items.move(fromOffsets:toOffset:) 来实际更新 items 数组的顺序。这种方式确保了当你在视图中移动项时,数据源(即 items 数组)也会同步更新,因此视图的顺序会保持不变。
请检查你的 onMove 实现是否有类似的逻辑,并确保你在移动项时更新了数据源。如果数据源没有正确更新,就会出现你描述的问题:视图在重新渲染时会恢复到原来的顺序。
登录后可查看更多问答,登录/注册
全新Swift从入门到进阶实战探探iOS APP
138 5
168 5
52 3
118 3
225 2