【发布时间】:2020-07-05 09:14:11
【问题描述】:
这是测试数据模型:
class Item: Identifiable {
let name: String
init( n: Int) {
self.name = "\(n)"
}
}
class Storage: ObservableObject {
@Published var items = [Item( n: 1), Item( n: 2)]
func reverse() {
items = self.items.reversed()
}
}
这是我的内容视图,带有 NavigationLink 和带有反转项目顺序按钮的详细视图:
struct ContentView: View {
@ObservedObject
var storage = Storage()
var body: some View {
NavigationView {
List {
ForEach( storage.items) { item in
NavigationLink( destination: Button( action: {
self.storage.reverse()
}) {
Text("Reverse")
}) {
Text( item.name).padding()
}
}
}
}
}
}
现在,如果我点击 Reverse,NavigationView 或 List 似乎会失去选择,弹出视图,然后再次推送:
这是预期的行为还是 SwiftUI 中的错误?有解决方法吗?我希望详细视图保持原样,无需重新加载。
【问题讨论】:
-
您正在更改已观察对象中的已发布值。您的视图将重新加载,这会导致上述行为。
-
我想要达到的效果与例如macOS 上的 Notes 应用程序:主视图是按上次修改日期排序的列表。然后,当我单击旧笔记并对其进行更改时,所选笔记将移至列表顶部。你认为这在 SwiftUI 中是不可能实现的吗?
标签: swift swiftui swiftui-list swiftui-navigationlink