处理NSPopUpButton中的模型外菜单项

时间:2014-07-25 21:47:40

标签: macos cocoa cocoa-bindings nspopupbutton

通过与NSArrayController绑定来设置NSPopUpButton的菜单是微不足道的。稍微复杂但非常频繁的用例是使用NSContentPlacementTagBindingOption将数组项从指定的索引插入到菜单中。这里给出了一个很好的例子,NSPopUpButton + Bindings + Show All Option

例如,假设我有,下面的UI使用弹出窗口从表视图中选择一列。由于用户可以动态添加和删除列,因此菜单项需要与模型同步,

                       _________________
Select table column:  |____None_________|   <--- this is the popup

菜单可以包含以下项目,

_______________
|    None     |   <-- Out of model item, "None" or empty selection
 -------------    <-- Out of model item, separator item
|  column 1   |   <-- These are dynamically replaced menu
|  column 2   |       item done using bindings and the
|  column 3   |       NSContentPlacementTagBindingOption
|_____________|       option from IB.

请注意,菜单中有两个非模型项,它们会在内容替换标记之前插入到IB中的UI中。使用内容替换标签大大简化了填充菜单并使项目与模型保持同步。但是,当用户进行超出绑定数组内容的选择时,这会导致巨大的问题:&#34;无&#34;标记和分隔符项。因为它们在阵列之外,所以它们不能成为选定的项目。因此,弹出按钮的selected object绑定不能用于跟踪从UI到模型的选择更改。

是否有人在菜单中找到了使用NSContentPlacementTagBindingOption,NSPopUpButton和非模型(静态)项目的成功方法?

我几乎准备放弃并手动填充菜单,这很糟糕。

NSPopUpButton需要接受两个阵列控制器:一个用于静态内容(无和分隔符),另一个用于动态内容,用于内容替换标记。这将使所有选择有效。

0 个答案:

没有答案