如何在NSTableView中禁用排序?

9

我有一个 NSTableView,每当我点击特定的标题列时,表格中的数据就会反转或倒置排序。我已经检查了 NSTableViewNSTableColumn,但找不到任何禁用此功能的方法。如果有人能帮忙禁用单击特定列标题时的排序,我将不胜感激。


1
请不要在你的问题标题前加上“[Objective C]”。你不仅缺少连字符,而且也没有抓住重点。这就是标签的作用。 - Jonathan Sterling
@ Jonathan:如果你能提供一些答案,我会很感激。 - Omayr
1
你使用Cocoa Bindings吗?你的设置是什么? - Yuji
@Yuji绑定,我认为它与GUI有关,因为我已经将一个NSArrayController绑定到它上面,但我想GUI函数与此无关。 - Omayr
1
嗯,这与这个有很多关系... :p 绑定太神奇了,你知道的。在绑定出现之前,NSTableView并没有自动排序;我们需要自己实现它。 - Yuji
@Yuji,抱歉老兄,我低估了你的猜测。你说得对,绑定确实很神奇。无论如何还是谢谢! - Omayr
1个回答

37

NSTableView的排序由其sortDescriptors完成,详见此处

NSTableColumn使用其sortDescriptorPrototype(参见此处)生成NSTableView的排序描述符,具体取决于您点击列标题的次数等情况。

如果使用dataSource管理数据,则通过委托方法tableView:sortDescriptorsDidChange:传递排序描述符,详见此处。只需忽略更改消息即可停止排序。

如果使用Cocoa绑定来管理数据,则表格列生成排序描述符并将其设置为NSArrayController。要停止它,请打开表格列的绑定检查器,选择value,然后取消选中"Creates Sort Descriptor"。


哇啦!太棒了,我使用绑定,问题现在已经解决了。非常感谢你,伙计。 - Omayr
谢谢!如何以编程的方式执行“要停止它,只需打开表列绑定的检查器,选择值,然后取消选中“创建排序描述符”。”? - sharkyenergy
你可以创建一个属性,该属性始终返回相同的排序描述符数组,并将NSTableView绑定到此属性。 - Flovdis
如果您使用Cocoa绑定来管理数据,则排序描述符由表列生成并设置为NSArrayController。要停止它,只需打开表列绑定的检查器,选择值,然后取消选中“创建排序描述符”。......我在Xcode 8.x上没有看到这个选项。 - Duck
“你只需要忽略变更信息以停止排序”这句话没有意义。它是一个委托方法,你需要实现它,如何能够“忽略”呢?代码示例会有所帮助。-1. - mxcl
@mxcl 你只是实现了一个什么也不做的委托方法。这和应对让你做很多事情的烦人邻居没有什么区别:你回答“我会做点什么”的同时实际上什么也没做 :-) - Yuji

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接