2011-03-26 75 views
9

我正在尝试使用NSArrayController和可可绑定来创建分段的NSTableView。我正在寻找类似的方法,例如在iOS中使用NSFetchedResultsController,您可以在其中设置节的关键路径。我想与NSArrayController做类似的事情。使用NSArrayController的分段NSTableView

我举个例子: 我有不同的任务。每个任务都有三个不同的优先级中的一个,低,中或高。这些任务还有标题,描述,日期等属性。我想按优先级对这些任务进行分段或分组(这里的部分关键路径是优先级)。

你可以用绑定和NSArrayController来解决这个问题吗?我需要多个NSArrayController还是只有一个?

+0

试试https://developer.apple.com/library/mac/samplecode/TableViewPlayground/Introduction/Intro.html – johndpope 2015-09-14 04:18:58

回答

7

尽管NSTableView可以渲染组行,但不幸的是它依赖于委托或数据源来平滑层次结构。它不理解备选数据源语义,如UITableView的,NSArrayController也不具有NSFetchedResultsController的部分方法的等价物。

一种选择是NSOutlineView这是专为显示任意深层次的数据,但它可能是一个简单的两层结构产生比必要更多的工作。 (您可以在大纲视图绑定到NSTreeController但树控制器不良记录,并启动,它的设计拙劣。)

所以,这里是我的建议:

  • 写您自己的控制器类,它实现NSTableViewDelegateNSTableViewDataSource
  • 使用一个按优先级排序的单个数组控制器,并编写自己的代码来抵消行索引以适应节标题。
  • tableView:isGroupRow:返回YES的章节标题。
  • 不要使用这个绑定。

您还可以从第三方寻找可重复使用,具有绑定功能的控制器。

+0

可以将NSTableCell字段的绑定与自制节标题结合使用!你应该实现'NSTableViewDelegate'方法'tableview:isGroupRow:'和'tableView:rowViewForRow:'。你可以省略'tableview:viewForTableColumn:row'的实现,它可以通过绑定完成。 – 2017-02-01 10:39:39

0

你必须有恰好拥有你想要的NSTableView的内容的自定义类实例手工填写NSArrayController的包括组行。控制器必须按照正确的顺序填写。所以它应该从一个组头对象开始,然后是一些数据对象,一个新的头对象,等等。自定义类应包含以下属性:

  1. 组标题的字符串值。当该行不是组头时为零。
  2. 布尔值isGroupHeader。需要一个简单的tableView:isGroupRow:实施。
  3. 您的常规数据的NSManagedObject值。当行是组标题时为零。

有了这个,您可以使用所有工具来实现所有NSTableView代表以获得正确分组的表格视图。

相关问题