我知道如何使 tableview 用户单击可排序,但如何以编程方式对其进行排序(不使用 NSArrayController)?文档对此很吝啬。这是我得到的:
private func updateThemeTableView()
{
_tableViewDataDict = getAssociatedThemesFor(_type);
_tableView.reloadData();
let sort = NSSortDescriptor(key: "Theme", ascending: true, selector: "caseInsensitiveCompare:");
_tableView.sortDescriptors = [sort];
}
但这行不通。
这里使用的 key 是什么?这应该是 TableView 列名还是列标识符(在 IB 中设置)?
什么时候应用排序? (我想在 _tableViewDataDict 接收到数据并 reloadData() 之后,NSTableViewDataSource.viewForTableColumn() 开始工作了?)
排序选择器是否有效,或者我是否必须为此提供一种方法?
最佳答案
设置表的排序描述符是不够的。您还需要响应 NSTableViewDelegate
方法 optional func tableView(_ aTableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [AnyObject])
通过将排序描述符应用到您的数据模型然后重新加载表的数据(通过 reloadData()
)。无论您是将排序描述符应用于整个表(不允许用户单击列标题)还是应用于单个列(允许用户单击列标题),都是如此。
如评论中所述,您无法对字典进行排序,因此您需要缓存排序后的数组并让表数据源方法引用数组而不是字典。
关于macos - 以编程方式对 NSTableView 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29960663/