以编程方式排序NSTableView

时间:2015-04-30 06:36:49

标签: macos cocoa swift sorting nstableview

我知道如何使tableview用户点击可排序,但如何以编程方式对其进行排序(不使用NSArrayController)?文档对此很吝啬。这是我得到的: private func updateThemeTableView() {     _tableViewDataDict = getAssociatedThemesFor(_type);     _tableView.reloadData();     let sort = NSSortDescriptor(key:“Theme”,升序:true,selector:“caseInsensitiveCompare:”);     _tableView.sortDescriptors = [sort]; } 但这不起作用。 这里使用的密钥是什么?这应该是表视图列名称还是列标识符(在IB中设置)? 何时申请排序? (我想在_tableViewDataDict收到数据和reloadData()之后,NSTableViewDataSource.viewForTableColumn()会做什么呢?) 排序选择器是有效还是我必须为此提供方法?

1 个答案:

答案 0 :(得分:3)

设置表格的排序描述符是不够的。您还需要通过将排序描述符应用于数据模型然后重新加载表格数据(通过NSTableViewDelegate)来响应optional func tableView(_ aTableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [AnyObject])方法reloadData()。无论您是将排序描述符应用于整个表(不允许用户点击列标题),还是单个列(允许用户点击列标题),都是如此。

如评论中所述,您无法对字典进行排序,因此您需要缓存已排序的数组,并让表数据源方法引用数组而不是字典。