NSPopupButton鉴于基于NSTableView的:让绑定工作(NSPopupButton

2019-08-16 18:16发布

问题描述

我想实现的东西,应该是简单而相当普遍:具有填充NSPopupButton内填充NSTableView的绑定一个绑定。 苹果介绍了本作在其文档中基于细胞的表实现一对一的关系中使用弹出式菜单 ,它看起来是这样的:

我不能让这一个视图基于表格的工作。 “作者”弹出窗口将不会填充自身,无论我做什么。

我有两个阵列控制器,一个为表中的项目( 产品 ),一个是作家( 作者 ),都在我的核心数据模型的各个实体相关联。 我绑定NSManagedPopup在我的小区在Interface Builder如下:

  • 内容 - > 作者 (控制键:arrangedObjects)
  • 含量值 - > 作者 (控制键:arrangedObjects,型号主要路径:
  • 选定对象 - > 表格单元格视图 (型号主要路径:objectValue.author

如果我某个地方在弹出的表格外,它工作正常(除了明显的选择),所以我想绑定的设置应该没问题。


事情我已经尝试

  1. 有人提出了一个使用一个IBOutlet属性的解决方法给作者阵列控制器,但是这似乎并没有为我工作的。

  2. 在另一个SO问题建议还是继承NSTableCellView和编程建立所需的连接。 我试过,但收效甚微。

    如果我设置的绑定,如下所示:

     - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { NSView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self]; if ([tableColumn.identifier isEqualToString:@"Author") { AuthorSelectorCell *authorSelectorCell = (AuthorSelectorCell *)view; [authorSelectorCell.popupButton bind:NSContentBinding toObject:self.authors withKeyPath:@"arrangedObjects" options:nil]; [authorSelectorCell.popupButton bind:NSContentValuesBinding toObject:self.authors withKeyPath:@"arrangedObjects.name" options:nil]; [authorSelectorCell.popupButton bind:NSSelectedObjectBinding toObject:view withKeyPath:@"objectValue.author" options:nil]; } return view; } 

    弹出确实显示出可能的作者的名单,但当前的选择总是显示为“没有价值”。 如果我添加

     [authorSelectorCell.popupButton bind:NSSelectedValueBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil]; 

    当前的选择完全是空的。 使当前选择显示出来的唯一方法是通过设置

     [authorSelectorCell.popupButton bind:NSSelectedObjectBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil]; 

    这会尽快打破我选择不同的作者,因为它会尝试分配NSString*Author*属性。

有任何想法吗?

Answer 1:

我有同样的问题。 我已经把一个样本项目显示出这是可能的Github上。

有人建议使用一个IBOutlet属性为作者阵列控制器的方法,但似乎并没有为我工作的。

这是一个没有工作对我的做法,并演示了示例项目 。 拼图中缺失的一点是,该IBOutlet中的阵列控制器必须在提供的TableView的委托类。



Answer 2:

有同样的问题,并发现这种解决方法 -基本上得到您的作者阵列控制器出了IBOutlet中笔尖,并通过文件所有者绑定到它。



Answer 3:

你可以尝试NSPopUpbutton这四个+ 1设置:

在我的例子,“allPersons”等同于你的“作者”。 我可作为文件的所有者属性(NSArray的*)allPersons。

此外,我约束的tableView委托文件的所有者。 如果没有约束,我只是得到一个默认列表:项目1,项目2,项目3



文章来源: NSPopupButton in view based NSTableView: getting bindings to work