为 NSTableView 设置默认排序顺序,可以通过以下步骤实现:
tableView:sortDescriptorsDidChange:
方法。这个方法会在排序顺序发生变化时被调用,并传入一个包含排序描述符的数组。tableView:sortDescriptorsDidChange:
方法中,根据传入的排序描述符对数据进行排序。可以使用 NSSortDescriptor
类的实例来表示排序描述符,其中包含排序的键和排序的方式(升序或降序)。tableView:objectValueForTableColumn:row:
方法中,根据排序描述符返回正确的值。这个方法会在每个单元格被渲染时调用,因此需要确保返回的值与当前的排序描述符相匹配。tableView:writeRowsWithIndexes:toPasteboard:
方法中,根据排序描述符返回正确的行索引。这个方法会在用户尝试复制或剪切表格中的行时调用,因此需要确保返回的行索引与当前的排序描述符相匹配。以下是一个简单的示例代码,演示如何为 NSTableView 设置默认排序顺序:
class MyTableViewDataSource: NSObject, NSTableViewDataSource, NSTableViewDelegate {
var data: [MyData] = []
var sortDescriptors: [NSSortDescriptor] = []
func tableView(_ tableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [NSSortDescriptor]) {
sortDescriptors = tableView.sortDescriptors
data.sort(using: sortDescriptors)
tableView.reloadData()
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
let dataItem = data[row]
if let identifier = tableColumn?.identifier, let keyPath = MyData.keyPathForColumnIdentifier(identifier) {
return dataItem.value(forKeyPath: keyPath)
}
return nil
}
func tableView(_ tableView: NSTableView, writeRowsWithIndexes rowIndexes: IndexSet, toPasteboard pboard: NSPasteboard) -> Bool {
let dataItems = rowIndexes.map { data[$0] }
let dataItemsData = NSKeyedArchiver.archivedData(withRootObject: dataItems)
pboard.declareTypes([NSPasteboard.PasteboardType(rawValue: "my.data.items")], owner: self)
pboard.setData(dataItemsData, forType: NSPasteboard.PasteboardType(rawValue: "my.data.items"))
return true
}
}
extension MyData {
static func keyPathForColumnIdentifier(_ identifier: String) -> String? {
switch identifier {
case "name":
return #keyPath(MyData.name)
case "age":
return #keyPath(MyData.age)
default:
return nil
}
}
}
在这个示例中,MyTableViewDataSource
是 NSTableView 的数据源和代理,MyData
是表格中的数据模型。sortDescriptorsDidChange
方法会在排序描述符发生变化时被调用,并根据新的排序描述符对数据进行排序。objectValueFor
方法会在每个单元格被渲染时调用,并根据当前的排序描述符返回正确的值。writeRowsWithIndexes
方法会在用户尝试复制或剪切表格中的行时调用,并根据当前的排序描述符返回正确的行索引。
希望这个示例可以帮助您理解如何为 NSTableView 设置默认排序顺序。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云