请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为啥我onDelete的代码可以正常运行,但是onMove在我拖动后又会恢复原来顺序?

为啥我onDelete的代码可以正常运行,但是onMove在我拖动后又会恢复原来顺序?

正在回答 回答被采纳积分+3

2回答

Y_H12 2024-09-14 18:32:57

Xcode15.4 更新了数据源 在预览界面移动也可能会恢复,用模拟器是正常的

0 回复 有任何疑惑可以回复我~
阿泽__ 2024-08-02 20:46:58

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 实现是否有类似的逻辑,并确保你在移动项时更新了数据源。如果数据源没有正确更新,就会出现你描述的问题:视图在重新渲染时会恢复到原来的顺序。


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信