swift - Swift - 在项目周围移动时保留导航视图中的选定项目
问题描述
我正在构建一个带有侧边栏导航视图的 macOS swiftUI 应用程序,它确定屏幕右侧显示的内容。用户可以在侧边栏中的项目周围移动。但是,当一个项目被拖到一个新位置时,navigationView 中的选择会被删除。我想知道如何在移动一个项目后保持选中相同的项目,即使正在移动的项目在选定的项目中也是如此。
这是我的 NavigationView 代码:
NavigationView {
List() {
ForEach(instances) { instance in
NavigationLink(destination: InstanceView(instance: instance), tag: instance, selection: $selectedInstance) {
InstanceRow(instance: instance).id(UUID())
}
}
.onMove(perform: move)
}
.listStyle(SidebarListStyle())
.navigationTitle("Instances")
.frame(minWidth: 150)
.toolbar {
ToolbarItem {
Button(action: toggleSidebar, label: {
Image(systemName: "sidebar.left")
})
}
}
.onAppear {
selectedInstance = instances[0]
}
}
这是我的 move() 函数:
private func move(from source: IndexSet, to destination: Int) {
var revisedItems: [Instance] = instances.map{$0}
revisedItems.move(fromOffsets: source, toOffset: destination)
for reverseIndex in stride(from: revisedItems.count - 1, through: 0, by: -1) {
revisedItems[reverseIndex].userOrder = Int16(reverseIndex)
}
do {
try viewContext.save()
} catch {
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
}
我不确定为什么这会导致 selectedInstance 变为 nil,并且我尝试保存 selectedInstance 的索引并在移动项目后计算它应该是什么,但我对此没有任何运气。那么保留所选侧边栏项目的说法是什么?
谢谢!
解决方案
推荐阅读
- django - 在 Django admin 中使用 save_model 更改表单字段的“必需”属性
- php - 如何从 Phinx 迁移插入中访问自动生成的 ID?
- laravel - 试图获取非对象 laravel 的属性“id”
- android - 评价视图时,MotionEvent#getX getY 返回异常值
- python - 如何在省略某些数据的同时获取一组 JSON 数据?
- python - Dataflow/apache Beam - 传入模式时如何访问当前文件名?
- unit-testing - SpringBootTest - 请求无效时测试异常
- purescript - PureScript 中的全局资源(适用于 AWS Lambda)
- sql-server - SSRS 2017 带有日期的级联参数
- swift - 从匹配的关联值中获取枚举