在核心数据实体中,我有一个“长度”属性。我以厘米为单位保存长度。
我想让用户能够查看和编辑以厘米或英寸为单位的长度。因此,我将 NSTextField 放置在 NSPopUpButton 旁边,并选择厘米和英寸。
根据 NSPopUpButton 的选择格式化 NSTextField 的最佳方法是什么?如果这个问题合理的话,我希望尽可能多地使用绑定(bind)。
我看到有
- NSNumberFormatters 和
- NSValueTransformers
或者我可以编写自定义代码来转换单位?
解决这个问题最优雅的方法是什么?
最佳答案
如果您将用户的 cm/in 选择保留为带有实体属性的每个实体选择,则可以使用值绑定(bind)和自定义值转换器来实现,并在文本字段上进行反向转换,即 cm/弹出窗口上的选择绑定(bind),以及实体上的 keyPathsForValuesAffectingLength 类方法。
如果属性 displayedInInches(或任何您所称的名称)注册为影响长度值的 keyPath,则在切换弹出窗口时将调用自定义值转换器,并且文本字段将更新。
如果厘米/英寸选择来自用户默认值(如果更改不是针对每个实例的),您可以将弹出窗口绑定(bind)到用户默认值,并让自定义值转换器考虑默认值,但更改该弹出窗口不会t 刷新文本字段。所以我认为你需要一个 IBAction 来触及实例的长度。
您可以在其上添加一个数字格式化程序 - 特别是如果您的值转换器转换为 NSNumber 而不是 NSString - 但主要用于本地化和有效位数,而不是用于 cm/in 数学。
关于cocoa - 如何将具有测量单位选择的 NSPopUpButton 连接到 NSTextField 的呈现方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460271/