swift - 当列表没有项目时强制视图卸载或不显示
问题描述
我有一个NavigationLink
基于数组成员建立的列表。当您单击列表项时,下一个视图会加载到右侧,显示该特定项的数据。删除项目时,会显示下一个项目。但是,当您删除列表中的所有项目时,最后一个项目的数据仍留在加载的视图中。我试图查看选定的项目为零,或者检查是否选择了某些其他形式,或者列表至少有一个项目,但我不知道如何检查所有这些并卸载视图。
这是代码:
@State var selectedNoteId: UUID?
NavigationView {
List(data.notes) { note in
NavigationLink(
destination: NoteView(note: note),
tag: note.id,
selection: $selectedNoteId
) {
VStack(alignment: .leading) {
Text(note.text.components(separatedBy: NSCharacterSet.newlines).first!).font(.body).fontWeight(.bold)
Text(note.dateText).font(.body).fontWeight(.light)
}
.padding(.vertical, 10)
}
}
.listStyle(InsetListStyle())
.frame(minWidth: 250, maxWidth: .infinity)
Text("Select a note or create a new one...")
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
.navigationTitle("A title")
如何卸载NoteView
并返回显示Text("Select a note or create a new one...")
谢谢您的帮助!
编辑:
这就是我删除数据的方式:
func removeNote() {
if let selection = selectedNoteId,
let selectionIndex = data.notes.firstIndex(where: { $0.id == selection }) {
//print("DEBUG: delete item: \(selectionIndex)")
data.notes.remove(at: selectionIndex)
}
}
解决方案
你可以用if
NavigationView {
if !data.notes.isEmpty {
List(data.notes) { note in
NavigationLink(
destination: NoteView(note: note),
tag: note.id,
selection: $selectedNoteId
) {
VStack(alignment: .leading) {
Text(note.text.components(separatedBy: NSCharacterSet.newlines).first!).font(.body).fontWeight(.bold)
Text(note.dateText).font(.body).fontWeight(.light)
}
.padding(.vertical, 10)
}
}
.frame(minWidth: 250, maxWidth: .infinity)
} else {
List(data.notes) { _ in EmptyView() }
}
Text("Select a note or create a new one...")
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
.listStyle(InsetListStyle())
.navigationTitle("A title")
.onAppear {
DispatchQueue.main.async {
selectedNoteId = data.notes.first?.id
}
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
data.notes.removeAll()
}
}
为空时notes
,不调用列表的内容。通过不关闭旧的导航链接,看起来 macOS 非常有问题
推荐阅读
- java - 如何通过 mvvm 架构使 Room 数据库插入方法返回 int?
- c# - Assembly.GetExecutingAssembly().GetManifestResourceStream 不加载流
- javascript - 在 React Hooks 中设置状态是否有通用方法?如何管理多个状态?
- oracle-sqldeveloper - SQL 开发人员中复制/迁移/导出之间的区别
- mysql - 使用 Take() to Mysql 的 Linq 查询不会对实际查询添加限制
- python-3.x - 如何在 Python Pandas 中合并另一个数据框中的特定列?
- c - 这个shellcode是什么意思?
- vba - 如何根据当前视图获取活动文件夹中前 X 项
- javascript - 在 PDF.js 中加载 pdf
- python - 异常处理,SyntaxError Vs ValueError Vs Default Exeption