macos - 以编程方式对 NSTableView 进行排序

标签 macos cocoa swift sorting nstableview

我知道如何使 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/

相关文章:

ios - Mac模拟器(Xcode)等待启动命令

linux - 段错误 11 在 mac 中,但在 linux 中没有,gcc 编译器

swift - 如何从命令行编译 Swift

ios - iOS 中的断断续续的动画

关闭终端实例后,JAVA_HOME 未设置/保存到路径变量

macos - 无法在 macos 上使用 pyenv 创建虚拟环境

macos - 如何用 cocoa 中的4个点制作矩形?对于可调整大小的矩形

iphone - 关于获取新的 NSManagedObject 对象

ios - swift 中另一个日期的同一周、月、年中的日期

ios - 在 UIPageViewController 中检查后退/前进滚动时的错误