首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何为NSTableView设置默认排序顺序?

为 NSTableView 设置默认排序顺序,可以通过以下步骤实现:

  1. 首先,确保 NSTableView 的数据源已经实现了 tableView:sortDescriptorsDidChange: 方法。这个方法会在排序顺序发生变化时被调用,并传入一个包含排序描述符的数组。
  2. 在数据源的 tableView:sortDescriptorsDidChange: 方法中,根据传入的排序描述符对数据进行排序。可以使用 NSSortDescriptor 类的实例来表示排序描述符,其中包含排序的键和排序的方式(升序或降序)。
  3. 在数据源的 tableView:objectValueForTableColumn:row: 方法中,根据排序描述符返回正确的值。这个方法会在每个单元格被渲染时调用,因此需要确保返回的值与当前的排序描述符相匹配。
  4. 在数据源的 tableView:writeRowsWithIndexes:toPasteboard: 方法中,根据排序描述符返回正确的行索引。这个方法会在用户尝试复制或剪切表格中的行时调用,因此需要确保返回的行索引与当前的排序描述符相匹配。

以下是一个简单的示例代码,演示如何为 NSTableView 设置默认排序顺序:

代码语言:swift
复制
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 设置默认排序顺序。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

macOS开发之NSTableView的应用详解

点击列标题后可以进行排序操作(会回调相关协议方法) @property (nullable, copy) NSSortDescriptor *sortDescriptorPrototype; //设置列尺寸的调整模式...=isHidden) BOOL hidden; //设置此列所有行的数据载体视图 如果不设置 默认为NSTextFieldCell @property (strong) id dataCell; //为...本文开头的示例代码,Cell-Base的TableView必须实现的两个协议方法是numberOfRowsInTableView和objectValueForTableColumn方法,第一个方法设置列表行数...:(NSTableView *)tableView sizeToFitWidthOfColumn:(NSInteger)column; /* 设置是否支持列的移动排序 */ - (BOOL)tableView...@property (nullable, strong) NSView *cornerView; //设置是否允许列拖拽排序 @property BOOL allowsColumnReordering

4.6K21

【Linux 内核 内存管理】分区伙伴分配器 ④ ( 备用内存区域列表排序方式 | 节点优先顺序 | 区域优先顺序 | 排序方式优缺点 | 默认排序方式 )

文章目录 一、备用内存区域列表排序方式 ( 节点优先顺序 | 区域优先顺序 ) 二、备用内存区域列表排序方式优缺点 ( 节点优先顺序 | 区域优先顺序 ) 三、备用内存区域列表默认排序方式 在上一篇博客...( 节点优先顺序 | 区域优先顺序 ) ---- 包含了 所有内存节点 的 备用内存区域列表 , 有 2 种排序方式 : ① 节点优先顺序 : 先 根据 " 节点距离 “ 由远到近 进行排序 ,...然后根据 ” 区域类型 " 由高到低 进行排序 ; ② 区域优先顺序 : 先 根据 " 区域类型 " 由高到低 进行排序 , 然后 根据 " 节点距离 " 由远到近 进行排序 ; 二、备用内存区域列表排序方式优缺点..., 但是可能会在 高区域类型内存 耗尽前 使用 低区域类型内存 ; ② 区域优先顺序 : 该排序 减少 低区域类型内存 耗尽的概率 , 但是不能保证选择的内存距离最近 ; 三、备用内存区域列表默认排序方式...---- 默认排序方法 : 系统会自动选择 最优 排序策略 ; 64 位系统 需要用到的 DMA 和 DMA32 类型区域较少 , 选择 " 节点优先顺序 " ; 32 位系统 选择 " 区域优先顺序

1.2K20

「快学SpringBoot」配置文件的加载顺序和配置项默认设置

总的来说,配置文件的加载顺序如下: 外部config目录 > 外部同级目录 > jar包内部config目录 > jar包内部同级目录 我们不妨在这四个地方都写同一个配置不同的值来验证一下这个顺序。...假如该配置文件没有设置server.port默认值的时候,那么就会往下一级配置文件去寻值,如果所有配置文件都找不到,那么将会读取默认的值。...server.port这个默认值,是springboot内部给我们提供的,其默认就是8080。 那么我们要怎么给我们自定义的配置项设置默认值呢?...总结 本文讲解了SpringBoot项目的多种放配置文件的方式,并且讲解了各种配置文件的加载顺序。在配置文件中都不存在值的时候,最后才会去读取默认值。...配置文件的加载顺序,在实际开发中,还是经常会涉及到的。

30610

「快学SpringBoot」配置文件的加载顺序和配置项默认设置

总的来说,配置文件的加载顺序如下: 外部config目录 > 外部同级目录 > jar包内部config目录 > jar包内部同级目录 我们不妨在这四个地方都写同一个配置不同的值来验证一下这个顺序。...假如该配置文件没有设置server.port默认值的时候,那么就会往下一级配置文件去寻值,如果所有配置文件都找不到,那么将会读取默认的值。...server.port这个默认值,是springboot内部给我们提供的,其默认就是8080。 那么我们要怎么给我们自定义的配置项设置默认值呢?...总结 本文讲解了SpringBoot项目的多种放配置文件的方式,并且讲解了各种配置文件的加载顺序。在配置文件中都不存在值的时候,最后才会去读取默认值。...配置文件的加载顺序,在实际开发中,还是经常会涉及到的。

1.5K40

Mac OSX 开发基础控件学习之 NSOutlineView

,NSTableView就会面临一个问题:因为在osx中,NSTableView没有分组功能( sections) 因为在cocoa 中提供了另一个控件供满足我们的需求NSOutlineView它是继承自...NSTableView的子类,是Mac OSX Application常用的控件之一,与NSTableView相似,NSOutlineView也使用行和列来显示内容,但所不同的是NSOutlineView...初始化设置NSOutlineView 初始化设置 本示例中,列数为默认值1: Columns = 1 设置行的交替显示效果:enable Alternating Rows 设置层级缩进:Indentation...Delegate Data Source 和 Delegate ViewController 实现数据源和代理方法 ViewController 实现方法 NSOutlineView数据源方法调用顺序...NSTableCellView 设置子节点cell重用标识 最终运行效果 运行效果 One more thing 设置展开所有节点或者某一节点 设置展开指定节点 从storyboard

1.5K20

Jekyll-Admin-Mac 开发纪要-左侧菜单栏

但是到目前来说我们几乎达到显示 Logo,但是我们的背景颜色设置白色不是我们所希望的,我们设置默认的为透明颜色。 我们还发现我们我们的试图并没有达到我们设置约束的大小。...我们观察到 NSTableView的父试图已经是 203的宽度了,既然这样我们就默认使用 200; 可以设置最外层 Border为没有即可。...self.view.autoresizingMask = [.viewWidthSizable,.viewHeightSizable] 这里说明一点,可选型不是Objective-C 那样一般用|连接...81D12FF2-A02E-496A-80D9-BC3994745199 我们设置选中的颜色为 ff9900。默认的颜色为 EBDAC1。...11 此时我们的效果已经达到了,我们觉得默认启动显示的第一个界面是0元素。 我们绑定界面的元素 NSTableView到 SideMenuView 。

2K10

一步一步,开始上手Mac 开发(一)

创建后的界面 项目就绪,现在你已经拥有一个具有空窗口的Mac Application了,点击运行,Xcode将开始编译这个App,当Xcode编译完成后,你就可以看到这个App的主窗口了(尽管它上面空空也...MasterViewController后的界面 1.9 选中MasterViewController.xib,因为我们这个工程练习需要显示一些Bugs信息列表,所以需要一个table view,在Mac中,这个控件叫做NSTableView...项目工程目录结构 Xcode默认的工程模版只会根据应用名创建组(Group)和一个子组supporting files ,当我们的工程不断变大时,必须处理大量的文件,这样查找需要的文件会变得非常困难。...在OSX中table view 控件是NSTableView,它类似iOS中的UITableView,不同的是在NSTableView的一行(row)中可以有很多列(column) 1.20 选中table...table view 设置后运行效果 与iOS相似,NSTableView 也有数据源和代理这两个属性,现在我们需要将MasterViewController设置为table view 的数据源和代理(

4K40

【C++】STL 容器 - set 集合容器 ④ ( 设置 set 集合容器的排序规则 | 默认的 set 集合容器 - 从小到大排列 | 设置容器从大到小排列 | 使用仿函数自定义集合排序规则 )

文章目录 一、设置 set 集合容器的排序规则 1、默认的 set 集合容器 - 从小到大排列 2、设置 set 集合容器从大到小排列 二、使用仿函数自定义 set 集合容器 排序规则 1、仿函数概念...2、使用仿函数实现 set 集合容器排序规则 一、设置 set 集合容器的排序规则 1、默认的 set 集合容器 - 从小到大排列 set 集合容器 底层由 红黑二叉树 数据结构实现 , 默认元素从小到大排序...include "set" // 声明遍历打印 set 集合容器的函数 void printS(set& se); int main() { // set 集合容器 // 初始化列表中的顺序会自动排序...set 集合容器从大到小排列 在 C++ 语言的 STL 标准模板库 中 , set 容器默认是按照升序 从小到大 排序的 ; 如果要设置自定义排序规则 , 可以通过传递一个比较函数或函数对象来指定排序方式...} }; int main() { // set 集合容器 // 初始化列表中的顺序会自动排序 set se; // 插入数据 se.insert

22710

软件设计原则之内聚、耦合类型剖析与内聚度、耦合度比较

文章目录 前言 一、何为内聚? 1.1、7 种内聚类型及其描述 二、何为耦合?...那你是如何判断何为高低呢?本篇文章将带你分别深度剖析和总结内聚与耦合的 7 种类型和描述,为在以后的项目开发与考试中更好地判断类型助你一臂之力! ? ---- 一、何为内聚?...1.1、7 种内聚类型及其描述 模块的内聚类型通常可以分为 7 种,我们根据内聚度从高到低排序,如下表所示: 内聚类型 描述 功能内聚 完成一个单一功能,各个部分协同工作,缺一不可 顺序内聚 处理元素相关...,而且必须顺序执行 通信内聚 所有处理元素集中在一个数据结构的区域上 过程内聚 处理元素相关,而且必须按特定的次序执行 瞬时内聚 所包含的任务必须在同一时间间隔内执行(:初始化模块) 逻辑内聚 完成一组逻辑上相关的任务...2.1、7 种耦合类型及其描述 模块的耦合性类型通常分为 7 种,我们根据耦合度从低到高排序,如下表所示: 耦合类型 描述 非直接耦合 没有直接联系,互相不依赖对方 数据耦合 借助参数表传递简单数据 标记耦合

1.3K21

软件设计原则:内聚、耦合有哪几种类型?内聚度、耦合度如何比较?

文章目录 前言 一、何为内聚? 1.1、7 种内聚类型及其描述 二、何为耦合?...那你是如何判断何为高低呢?本篇文章将带你分别深度剖析和总结内聚与耦合的 7 种类型和描述,为在以后的项目开发与考试中更好地判断类型助你一臂之力! ---- 一、何为内聚?...1.1、7 种内聚类型及其描述 模块的内聚类型通常可以分为 7 种,我们根据内聚度从高到低排序,如下表所示: 内聚类型描述功能内聚完成一个单一功能,各个部分协同工作,缺一不可顺序内聚处理元素相关,而且必须顺序执行通信内聚所有处理元素集中在一个数据结构的区域上过程内聚处理元素相关...,而且必须按特定的次序执行瞬时内聚所包含的任务必须在同一时间间隔内执行(:初始化模块)逻辑内聚完成一组逻辑上相关的任务偶然内聚完成一组没有关系或松散关系的任务 二、何为耦合?...2.1、7 种耦合类型及其描述 模块的耦合性类型通常分为 7 种,我们根据耦合度从低到高排序,如下表所示: 耦合类型描述非直接耦合没有直接联系,互相不依赖对方数据耦合借助参数表传递简单数据标记耦合一个数据结构的一部分借助于模块接口被传递控制耦合模块间传递的信息中包含用于控制模块内部逻辑的信息外部耦合与软件以外的环境有关公共耦合多个模块引用同一个全局数据区内容耦合一个模块访问另一个模块的内部数据

2K30

Elasticsearch 8.X 如何基于用户指定 ID 顺序召回数据?

问题来源:https://t.zsxq.com/0cdyq7tzr 2、方案探讨 2.1 Elasticsearch 默认排序机制 在 Elasticsearch 中,如果未指定排序规则,检索结果的默认排序方式是按照文档的相关性得分...在这些情况下,文档的评分通常为 1.0 或其他默认值(filter、must_not 评分为0)。 2.2 如何基于用于指定的 ID 顺序召回数据?...这里使用的 transient 属性意味着设置的更改是临时的,只在集群重启之前有效。当集群重新启动时,这个设置会被重置为默认值。...查询的主要目的是根据给定的 ID 列表检索文档,并按照 ID 列表的顺序对检索到的文档进行排序。 以下是查询的各个部分的详细解释: size: 设置为 10,表示查询将返回最多 10 个文档。...sort: 使用脚本排序(_script)按照给定的 ID 列表的顺序对返回的文档进行排序。-- type: 设置为 "number",表示脚本返回的值将被视为数字。

30710

Pandas知识点-排序操作

ascending: 排序默认是升序排序,ascending参数默认为True,将ascending参数设置成False则按降序排序。 ?...axis: 排序默认是按行索引排序(对每一行数据排序),axis参数默认为0,将axis参数设置成1则按列索引排序(对每一列数据排序)。不过,在实际应用中,对列排序的情况是极少的。...无返回值时不能链式调用,调用head(),将inplace设置成True时要注意。 2. 按多重索引进行排序 ?...继续上面的情况,按多重索引中的第一个行索引排序后不继续排序,如果第一个行索引中有相等的值,结果的顺序是什么样的呢?是不是保持原始数据的先后顺序?...kind: 在sort_index()中默认采用的排序算法是快速排序,kind参数默认为quicksort(快速排序)。快速排序是一种不稳定的排序算法,不能保证结果中值相等的数据保持先后顺序

1.7K30
领券