【问题标题】:How to sort a view based table?如何对基于视图的表进行排序?
【发布时间】:2012-04-16 00:36:44
【问题描述】:

我有一个基于单元格的表格,通过数组控制器绑定到一个核心数据实体,其中包含一个日期字段和一个显示日期的列,所有这些都是在 InterfaceBuilder 中创建的,没有任何编码。我可以单击列标题以获取按日期排序的数据,而无需任何编码甚至任何进一步的绑定。对于基于视图的表,如何获得这种行为?我必须求助于一些编码吗?

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

【问题讨论】:

    标签: xcode macos cocoa sorting


    【解决方案1】:

    也许没有人在使用这些新奇的基于视图的表格,或者你们都一头雾水。三周后,我偶然发现了一个解决方案,不是完全无代码,它对我有用,所以我想我最好分享一下。

    秘诀是表的Sort Descriptors 绑定,您必须将其绑定到NSSortDescriptors数组。事后看来很明显。道德:试着理解锡上的内容!我天真地认为这是我可以定义排序描述符或绑定到某个可排序对象的地方,Interface Builder 是设计时的东西。当然没有任何效果。继续这个例子,下面是要做的事情。

    声明一个数组属性。我在我的应用委托中执行了此操作。

    @property (assign) NSArray *dateSorters;
    

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

    dateSorters = [NSArray arrayWithObject:
        [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO]];
    

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

    还有一个小问题 - 在第一次出现时,表格未排序。

    【讨论】:

    • 要在表格首次出现时对其进行排序,您必须在awakeFromNib 中已经定义了dateSorters。因此,您可以将它们分配到init
    【解决方案2】:

    确保将表的排序描述符绑定到数组控制器的sortDescriptors 属性。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这两种解决方案都不起作用。第一个根本没有,第二个只有在表格第一次显示时才出现。 start 后对绑定值的更改不排序。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2013-08-13
      • 2019-03-31
      • 2016-07-07
      • 2012-04-08
      • 1970-01-01
      相关资源
      最近更新 更多