0

我正在开发一个应用程序,我想做一些与这个问题中提出的问题非常相似的事情:How to add row-span in view-based NSTableView?

第二个答案让我很感兴趣,因为它是一个聪明的解决方案,但我不知道如何使两个表视图保持同步。特别是,我没有看到任何明显的方法来确保项目表视图中的行显示在对应的组旁边。对我来说最明显的解决方案是:

  1. 将项目表的数据源基于组表视图的数据源。因此,组数据源中的每个对象都有一个属于它的项目列表,然后每次项目表视图需要一行时,遍历组,并计算每个组中的项目,直到找到您需要的项目. 这听起来非常低效。

  2. NSSortDescriptors 在项目上的一些巧妙应用,以便它们最终排序,以便行匹配。这对我来说似乎有点神奇,如果你能让它确定性地工作,你会很幸运。

  3. 保留指向您正在处理的当前组的指针并返回该组中的下一个项目,直到您用完该组的项目,然后移动到下一个组。这将取决于表视图按顺序要求行。如果任何地方都存在任何并发性或无序性,这似乎也将非常困难。

所有这些解决方案都有一些非常明显的缺陷。我觉得我错过了这里的“把戏”,或者可能只是站在我面前的巨型紫色大象。:)

编辑:针对rdelmar评论,我将添加一些说明。对于我的特殊情况,组中的项目数量是可变的——一些组可能有两个,其他组可能有十个。我想找到的解决方案不应该取决于组中有固定数量的项目。

就选择行为而言,组中的每个项目可能都不是可选的,但它们确实需要是可编辑的。组可能会被作为一个整体进行编辑,即用户会说“我想编辑组 A”,这将触发编辑组中的任何字段或属于它的项目的能力。可能可以使用标签而不是表格视图,但似乎这将涉及复制表格视图免费为您提供的大量工作(在网格中排列视图等)。

我为此提出的第一个解决方案实际上涉及在组表视图的每一行内嵌入项目的表视图。因此,顶级表格视图将仅包含组,然后每个组将有自己的嵌入式表格来显示其拥有的项目。我最终放弃了那个解决方案,希望能找到一个包含较短视图树的解决方案。

4

0 回答 0