改变顺序时如何保存物品的位置?



这是我的简单应用程序。我使用.onMove方法来改变我的项目的顺序。但是现在我只能改变顺序,但是它不能保存(留下一个新的位置)。所以当我停止拿着我的物品时,它立即回到了它的位置。你觉得我怎么能修好它?

import SwiftUI
struct HomeView: View {

struct Item: Identifiable {
var id = UUID()
var name: String
var color: Color
}

@State var items = [
Item(name: "Item 1", color: .red),
Item(name: "Item 2", color: .green),
Item(name: "Item 3", color: .blue),
Item(name: "Item 4", color: .brown)
]

var body: some View {
List {
ForEach(items, id: .id) { item in
Text(item.name)
.frame(maxWidth: .infinity)
.padding()
.background(item.color)
.foregroundColor(.white)
}
.onMove(perform: move)
}
}
func move(from source: IndexSet, to destination: Int) {
items.move(fromOffsets: source, toOffset: destination)
}
}
struct HomeView_Previews: PreviewProvider {
static var previews: some View {
HomeView()
}
}

当你在模拟器或设备上测试时,它可以工作。这是SwiftUI预览的奇怪行为。不知道为什么它不能正常工作。在预览时,只有启用EditMode才能工作。

作为推荐,您可以通过List本身处理移动:

var body: some View {
List($items, editActions: .move) { $item in
Text(item.name)
.frame(maxWidth: .infinity)
.padding()
.background(item.color)
.foregroundColor(.white)
}
}

一切开箱即用;)你也可以通过反馈助手

来报告这个问题

相关内容

  • 没有找到相关文章

最新更新