如何对基于视图的表进行排序?

时间:2012-04-16 00:36:44

标签: xcode macos cocoa sorting

我有一个基于单元格的表,通过数组控制器绑定到一个带有日期字段的核心数据实体,以及一个显示日期的列,所有这些都是在InterfaceBuilder中创建的,没有任何编码。我可以点击列标题来获取按日期排序的数据,无需任何编码甚至任何进一步的绑定。如何为基于视图的表获取此行为?我是否需要采用一些编码方式?

日期显示在绑定到表格单元格视图的文本字段中,并带有关键字objectValue.date。

3 个答案:

答案 0 :(得分:4)

也许没有人使用这些新奇的基于视图的表格,或者也许你们都感到沮丧。三个星期后,我偶然发现了一个解决方案,不是没有代码,对我有用,所以我想我最好分享一下。

秘密是表的排序描述符绑定,您必须绑定到 NSSortDescriptors 数组。后见之明显而易见。道德:尝试理解它在锡上的含义! Naïvely我认为这是我可以定义排序描述符或绑定到某个可排序对象的地方,Interface Builder是一个设计时的东西。当然没什么用。继续这个例子,这是做什么的。

声明一个数组属性。我是在我的app委托中完成的。

@property (assign) NSArray *dateSorters;

并合成它。在OS 10.7中,您不需要匹配的ivar。初始化它。我在applicationDidFinishLaunching:

中这样做了
dateSorters = [NSArray arrayWithObject:
    [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO]];

这是唯一的活动代码行。现在绑定。使用模型密钥路径 dateSorters 将阵列控制器的排序描述符绑定到您的应用程序委托。如果它没有出现在可能的列表中,请尝试进行构建。该表现在将显示为已排序。要使列标题单击起作用,必须将表的排序描述符绑定到同一个数组,并且必须将该列与日期字段相关联:选择日期列,将其值绑定到您的数组控制器,arrangeObjects与模型密钥路径日期,并检查创建排序描述符。这与您对基于单元格的表所做的相同。现在单击日期列标题可切换排序顺序。按预期单击其他列标题不会执行任何操作。

剩下一个小问题 - 在第一次出现时,表格未分类。

答案 1 :(得分:2)

确保将表的Sort Descriptors绑定绑定到数组控制器的sortDescriptors属性。

答案 2 :(得分:1)

这有点晚了但你不必编写任何代码行。而是转到列的属性检查器,并将“排序键”字段设置为“日期”(不带引号)。选择器字段将自动设置为“比较”。

编辑:事实证明你甚至不必这样做。将表列的值绑定到您希望对行进行排序的属性,就像对基于单元格的表一样,这就是它。这样,您不会将整个表内容绑定到数组控制器的已排列对象,这与基于视图的表上的Apple指南相矛盾。当我第一次创建并绑定基于单元格的表时,至少它对我有用,然后我将其转换为基于视图的表(在属性检查器中,Xcode 4.5.2,OS X 10.7.5)。我尝试通过从基于视图的表开始,然后THEN绑定列,但排序不起作用(它可能只是我做的一些错误)。