如何将NSPopUpButton与测量单位选择连接到NSTextField的显示方式?

时间:2014-05-04 18:56:51

标签: cocoa core-data cocoa-bindings nsnumberformatter nsvaluetransformer

在Core Data实体中,我有一个“length”属性。我以厘米为单位保存长度。

我想让用户以厘米或英寸为单位查看和编辑长度。所以我将NSTextField放在NSPopUpButton旁边,选择cm和inch。

根据NSPopUpButton的选择格式化NSTextField的最佳方法是什么?如果这个问题合理,我希望尽可能使用绑定。

我看到有

  • NSNumberFormatters和
  • NSValueTransformers

或者我可以编写自定义代码来转换单位吗?

解决此问题最优雅的方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您将用户的cm / in选项保留为具有实体属性的每个实体选项,则可以使用值绑定和在文本字段上具有反向转换的自定义值转换器来执行此操作,cm /在弹出窗口上的选择绑定,以及实体上的keyPathsForValuesAffectingLength类方法。

如果属性showsInInches--或您调用的任何属性 - 被注册为影响长度值的keyPath,则在切换弹出窗口时将调用自定义值转换器,并且文本字段将更新。

如果cm / in选项来自用户默认值(如果更改不是每个实例),您可以将弹出窗口绑定到用户默认值并让自定义值转换器考虑默认值,但更改该弹出窗口不会t刷新文本字段。所以我认为你需要一个IBAction来触及实例的长度。

您可以在其上添加一个数字格式化程序 - 特别是如果您的值转换器转换为NSNumber而不是NSString--但主要用于本地化和有效数字的数量,而不是cm / in数学。