通过与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需要接受两个阵列控制器:一个用于静态内容(无和分隔符),另一个用于动态内容,用于内容替换标记。这将使所有选择有效。