我正在开发一个应用程序,我想做一些非常类似于此问题中提出的问题的应用程序:How to add row-span in view-based NSTableView?
second answer引起我的兴趣是一个聪明的解决方案,但我无法弄清楚如何让两个表视图保持同步。特别是,我没有看到任何明显的方法来确保项目表视图中的行显示在对应的组旁边。对我来说最明显的解决方案是:
将items表的数据源设置为组表视图的数据源。因此,组数据源中的每个对象都有一个属于它的项目列表,然后每次项目表视图需要一行,遍历组,并计算每个组中的项目,直到找到所需的项目为止。这听起来可怕效率低下。
NSSortDescriptors在项目上的一些巧妙应用,使得它们最终排序以便行匹配。这对我来说似乎是一种魔力,就像你能够确定地让它工作一样,你会很幸运。
保持指向您正在处理的当前群组的指针,并返回群组中的下一个项目,直到您用完该群组的项目,然后转到下一个群组。这将取决于按顺序查询行的表视图。如果在任何地方有任何并发或无序,这似乎也很难。
所有这些解决方案都有一些非常明显的缺陷。我觉得我在这里错过了“诡计”,或者只是站在我面前的巨型紫色大象。 :)
修改:在回复rdelmar的comment时,我会添加一些说明。对于我的特定情况,组中的项目数是可变的 - 一些组可以有两个,其他组可以有十个。我想找到的解决方案不应该依赖于组中有固定数量的项目。
就选择行为而言,可能没有必要对组中的每个项目进行选择,但它们确实需要是可编辑的。组可能会作为一个整体进行编辑,即用户会说“我想编辑组A”,这将触发编辑组中的任何字段或属于它的项目的功能。可能使用标签而不是表视图,但似乎这会涉及重复表视图免费提供的大量工作(在网格中安排视图等)。
我提出的第一个解决方案实际上涉及为组表视图的每一行内的项嵌入一个表视图。因此,顶级表视图只包含组,然后每个组都有自己的嵌入式表来显示它拥有的项目。我最终放弃了这个解决方案,希望找到一个涉及较短视图树的解决方案。