在 macOS 上使用@FetchRequest 的排序描述符对 Table 进行排序
Sorting a Table with @FetchRequest's sort descriptors on macOS
Apple 在 WWDC21 上推出了 Table 容器,它允许使用 SwiftUI 在 macOS 上创建多列 tables:
我们可以提供对排序描述符数组的绑定,以生成 table sortable 的列。我在这里使用 @FetchRequest
的 sortDescriptors
:
struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(sortDescriptors: [SortDescriptor(\.addDate, order: .reverse)], animation: .default)
private var videos: FetchedResults<Video>
@State
private var selection = Set<Video.ID>()
var body: some View {
NavigationView {
Table(videos, selection: $selection, sortOrder: $videos.sortDescriptors) { // <-- HERE
TableColumn("Title") {
Text([=11=].title)
}
TableColumn("Added") {
Text([=11=].addDate)
}.width(120)
TableColumn("Published") {
Text([=11=].publishedAt)
}.width(120)
TableColumn("Duration") {
Text([=11=].duration)
}.width(50)
}
}
}
}
虽然编译和运行没有错误,但排序不起作用。我可以单击 table 的任何列,但没有任何反应。
我是不是遗漏了什么,或者这是 macOS 上 Table
的已知错误?
您的 TableColumn
初始值设定项需要提供一个 value
参数,该参数采用确定如何排序的 keyPath。 docs中给出的例子:
TableColumn("Given Name", value: \.givenName) { person in
Text(person.givenName)
}
如果视图中的文本使用相同的键路径,您可以删除内容闭包:
TableColumn("Given Name", value: \.givenName)
所以在你的情况下,你应该能够做类似
的事情
TableColumn("Title", value: \.title)
……等等。
Apple 在 WWDC21 上推出了 Table 容器,它允许使用 SwiftUI 在 macOS 上创建多列 tables:
我们可以提供对排序描述符数组的绑定,以生成 table sortable 的列。我在这里使用 @FetchRequest
的 sortDescriptors
:
struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(sortDescriptors: [SortDescriptor(\.addDate, order: .reverse)], animation: .default)
private var videos: FetchedResults<Video>
@State
private var selection = Set<Video.ID>()
var body: some View {
NavigationView {
Table(videos, selection: $selection, sortOrder: $videos.sortDescriptors) { // <-- HERE
TableColumn("Title") {
Text([=11=].title)
}
TableColumn("Added") {
Text([=11=].addDate)
}.width(120)
TableColumn("Published") {
Text([=11=].publishedAt)
}.width(120)
TableColumn("Duration") {
Text([=11=].duration)
}.width(50)
}
}
}
}
虽然编译和运行没有错误,但排序不起作用。我可以单击 table 的任何列,但没有任何反应。
我是不是遗漏了什么,或者这是 macOS 上 Table
的已知错误?
您的 TableColumn
初始值设定项需要提供一个 value
参数,该参数采用确定如何排序的 keyPath。 docs中给出的例子:
TableColumn("Given Name", value: \.givenName) { person in
Text(person.givenName)
}
如果视图中的文本使用相同的键路径,您可以删除内容闭包:
TableColumn("Given Name", value: \.givenName)
所以在你的情况下,你应该能够做类似
的事情TableColumn("Title", value: \.title)
……等等。