macos - cocoa 在 NSTableView 内绑定(bind) NSTableView

标签 macos cocoa nstableview cocoa-bindings

我正在尝试在 NSTableView 内显示 NSTableView。这是一个类似 iTunes 的专辑/轨道 View 。所以有一个包含 10 张专辑的列表,每个专辑都有一些轨道。我想在外部表格 View 中显示专辑,并在内部表格 View 中显示每个专辑的轨道。

第一个 NSTableView 绑定(bind)到 NSArrayController。数组中的每个对象都有自己的“tracks”NSArrayController,但我不知道如何告诉“tracks”NSTableView其内容来自“album”NSTableView的属性。

最佳答案

如果我理解正确的话,嵌套数组 Controller 的源内容来自所有者表单元格的objectValue。所以你不能将数组 Controller 内容源作为表格单元格的objectValue。我正在做类似的事情,因为我想根据对象值过滤数组内容

我正在做的事情(似乎有效)是为嵌套表格单元格 View 创建一个单独的 nib 文件,并使用它自己的 nstablecellview 子类。将数组 Controller 包含在 Nib 中,并在单元 View 子类中创建它的导出。

在 TableView Controller 的 viewDidLoad 方法中将其注册到 TableView 中:

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

然后,在单元 View 子类的 awakeFromNib 方法中,手动进行需要对象值的绑定(bind):

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

瞧。

请注意,使用此技术时,nib 文件的文件所有者不是您的 nstablecellview 子类,而是 TableView 的 View Controller 。

关于macos - cocoa 在 NSTableView 内绑定(bind) NSTableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23575099/

相关文章:

objective-c - Objective C 登录时记住数据

python - 使用未知长度列表填充 Tkinter OptionMenu,即串行端口列表

objective-c - CALayer 未显示正确的颜色

objective-c - 如何确定哪个屏幕包含菜单栏?

swift - 如何只允许在 NSTableView 中的行之间删除行?

cocoa - 如何使基于trackingAreas的NSTableRowView drawBackgroundInRect在滚动时更新得足够快?

更改 OS X 控制台输出中的颜色

python - 在 macOS X Capitan 中更新 OpenSSL for python 3.5

multithreading - 我的 cocoa 应用程序记录了一些 "[Switching to process XXXX thread 0xXXXX]"

cocoa - NSTableView:新行中没有文本