使用 NSArrayController 分段 NSTableView

发布于 2024-10-27 19:12:48 字数 349 浏览 6 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

吾性傲以野 2024-11-03 19:12:48

虽然 NSTableView 可以呈现组行,但不幸的是,它依赖于委托或数据源来展平层次结构。它不理解像 UITableViewUITableViewStyleGrouped 这样的备用数据源语义,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 like UITableView's UITableViewStyleGrouped, nor does NSArrayController have equivalents to NSFetchedResultsController'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 to NSTreeController but the tree controller is poorly documented, and to boot, it's badly designed.)

So, here's what I suggest:

  • Write your own controller class which implements NSTableViewDelegate and NSTableViewDataSource.
  • Use a single array controller which sorts by priority, and write your own code to offset the row indexes to accommodate the section headings.
  • Return YES from tableView:isGroupRow: on the section headings.
  • Don't use bindings for this one.

You could also look for a reusable, bindings-capable controller from a third party.

破晓 2024-11-03 19:12:48

您可以尝试使用此答案中提到的工具来实现分段 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

迟到的我 2024-11-03 19:12:48

您必须使用自定义类实例手动填充 NSArrayController,该实例准确保存您想要完成的 NSTableView 的内容,包括组行。控制器必须按正确的顺序填写。因此它应该从一个组头对象开始,然后是一些数据对象、一个新的头对象等等。自定义类应包含以下属性:

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

有了这个,您就拥有了实现所有 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:

  1. String value for the group header. Is nil when the row is no group header.
  2. Boolean value isGroupHeader. Needed for an easy tableView:isGroupRow: implementation.
  3. NSManagedObject value for your regular data. Is nil when the row is a group header.

With this you have all the tools to implement all NSTableView delegates to get a properly grouped table view.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文