使用 NSArrayController 分段 NSTableView
我正在尝试使用 NSArrayController
和可可绑定创建分段的 NSTableView
。我正在寻找类似的方法,例如 iOS 中的 NSFetchedResultsController ,您可以在其中设置部分键路径。我想用 NSArrayController 做一些类似的事情。
我给你举个例子: 我有不同的任务。每个任务都有三个不同优先级之一:低、中或高。任务还具有标题、描述、日期等属性。我想按优先级对任务进行分段或分组(此处的部分键路径是优先级)。
我可以用绑定和 NSArrayController 来解决这个问题吗?我需要多个 NSArrayController 还是只需要一个?
I'm trying to create a sectioned NSTableView
using NSArrayController
and cocoa bindings. I'm searching for a similar approach like with NSFetchedResultsController
in iOS, where you can set a section key path. I want to make something similar with NSArrayController
.
I give you an example:
I have different tasks. Each task has one of three different priorities, low, medium or high. The tasks also has attributes like title, description, date, etc. I want to section or group the tasks by priority (the section key path here is the priority).
You can I solve this problem with bindings and NSArrayController
? Do I need multiple NSArrayController
or just one?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
虽然 NSTableView 可以呈现组行,但不幸的是,它依赖于委托或数据源来展平层次结构。它不理解像
UITableView
的UITableViewStyleGrouped
这样的备用数据源语义,NSArrayController
也没有与NSFetchedResultsController
等效的东西。的部分方法。一种选择是 NSOutlineView ,它设计用于显示任意深度的分层数据,但它可能会产生比简单两级结构所需的更多工作。 (您可以将大纲视图绑定到 NSTreeController ,但树控制器的文档记录很少,并且启动时,它的设计很糟糕。)
因此,这就是我的建议:
NSTableViewDelegate 和 NSTableViewDataSource 。
tableView:isGroupRow:
返回YES
。您还可以从第三方寻找可重复使用、具有绑定功能的控制器。
Though
NSTableView
can render group rows, unfortunately it depends on the delegate or data source to flatten the hierarchy. It doesn't understand alternate data source semantics likeUITableView
'sUITableViewStyleGrouped
, nor doesNSArrayController
have equivalents toNSFetchedResultsController
's section methods.One option is
NSOutlineView
which is designed for displaying arbitrarily deep hierarchical data, but it probably creates more work than necessary for a simple two-level structure. (You can bind an outline view toNSTreeController
but the tree controller is poorly documented, and to boot, it's badly designed.)So, here's what I suggest:
NSTableViewDelegate
andNSTableViewDataSource
.YES
fromtableView:isGroupRow:
on the section headings.You could also look for a reusable, bindings-capable controller from a third party.
您可以尝试使用此答案中提到的工具来实现分段 NSTableView:
https://stackoverflow.com/a/5369550/893113
You could try implementing a sectioned NSTableView using the tools mentioned in this answer:
https://stackoverflow.com/a/5369550/893113
您必须使用自定义类实例手动填充 NSArrayController,该实例准确保存您想要完成的 NSTableView 的内容,包括组行。控制器必须按正确的顺序填写。因此它应该从一个组头对象开始,然后是一些数据对象、一个新的头对象等等。自定义类应包含以下属性:
isGroupHeader
。需要简单的tableView:isGroupRow:
实现。有了这个,您就拥有了实现所有 NSTableView 委托的所有工具,以获得正确分组的表视图。
You have to fill NSArrayController manually with a custom class instances that exactly holds the content of the NSTableView you want to accomplish, including the group rows. The controller must be filled in the correct order. So it should start with a group header object, then some data objects, a new header object, and so on. The custom class should contain the following properties:
isGroupHeader
. Needed for an easytableView:isGroupRow:
implementation.With this you have all the tools to implement all NSTableView delegates to get a properly grouped table view.