Cocoa在NSTableView中绑定NSTableView

时间:2014-05-09 22:49:02

标签: macos cocoa nstableview cocoa-bindings

我试图在NSTableView中显示NSTableView。这适用于类似iTunes的专辑/曲目视图。所以有10张专辑的清单,每张专辑都有一些曲目。我想在外表视图中显示专辑,在内部显示每个专辑的曲目。

第一个NSTableView绑定到NSArrayController。数组中的每个对象都有自己的" track" NSArrayController,但是我无法弄清楚如何分析这些曲目' NSTableView其内容来自“专辑”的属性。 NSTableView的。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,嵌套数组控制器的源内容来自所有者表格单元格的objectValue。因此,您无法将数组控制器内容源作为表格单元格的objectValue。我正在做类似的事情,因为我想根据对象值

过滤数组内容

我正在做的,似乎正在工作,是为你的嵌套表格单元格视图创建一个单独的nib文件,它有自己的nstablecellview子类。在nib中包含数组控制器,并在单元视图子类中为其创建一个插座。

将其注册到表视图控制器的viewDidLoad方法中的表视图:

NSNib *cellView = [[NSNib alloc] initWithNibNamed:@"MyTableCellView" bundle:nil];
[myTableView registerNib:cellView forIdentifier:@"myTableCellView"];

然后,在单元格视图子类的awakeFromNib方法中,手动创建需要对象值的绑定:

[self.arrayController bind:@"contentSet"
                  toObject:self
               withKeyPath:@"objectValue.tracks"
                   options:nil];

瞧。

请注意,使用此技术时,nib文件的所有者文件不是nstablecellview子类,它是表视图的视图控制器。

答案 1 :(得分:-1)

问题在于不了解MVC模式(模型 - 视图 - 控制器)。视图的内容永远不会来自另一个视图,它来自模型对象通过控制器。每个tableviews的内容总是来自NSObjectController或NSArrayController之类的子类。基本上,有两种解决方案:

  • 绑定'轨道' tableview选择'专辑'阵列控制器
  • 创建一个'曲目'数组控制器并将其绑定到选择的专辑'阵列控制器。绑定'轨道'查看'曲目'阵列控制器

第三个解决方案是使用带有NSOutlineView的NSTreeController,但是大纲视图和树控制器非常难以使用。