cocoa - 如何将具有测量单位选择的 NSPopUpButton 连接到 NSTextField 的呈现方式?

标签 cocoa core-data cocoa-bindings nsnumberformatter nsvaluetransformer

在核心数据实体中,我有一个“长度”属性。我以厘米为单位保存长度。

我想让用户能够查看和编辑以厘米或英寸为单位的长度。因此,我将 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/

相关文章:

objective-c - NSComboBox : How to tell user has typed in information that is not in the pop up list and read it

objective-c - cocoa :带枚举键的字典?

objective-c - dealloc 调用的困惑

objective-c - 如何强制核心数据从模型创建 Sqlite 数据库*之前*任何数据都保存在应用程序中?

iphone - 在哪里存储核心数据文件?

ios - 如何发布依赖于关系的自定义核心数据属性的通知?

objective-c - 如何通过 NSArrayController 获得模型更改的通知?

objective-c - NSS支持自动图形切换支持

xml - 将 XSLT 应用于 xml 时保留 "<"

multithreading - 丢弃 NSManagedObjects