我想进行一些绑定(bind),根据文本字段中的单个数值来切换弹出菜单中的项目标题。让我解释一下:
这是我的用户界面:
我希望我的菜单项根据文本字段中的数字自动调整为单数或复数。例如,当我在框中输入“1”时,我希望菜单项标记为“分钟”、“小时”和“天”。当我输入“4”时,我希望菜单项标记为“分钟”、“小时”和“天”。
迄今为止我做了什么:
- 我将三个菜单项的标签绑定(bind)到与文本字段的值相同的键路径。
- 我创建了一个 NSValueTransformer 子类来解释文本字段中的值并返回单数或复数以用作项目标题。
- 我将此值转换器应用于三个绑定(bind)。
问题:
我的值转换器可以返回单数或复数,但它无法根据其应用的菜单项设置适当的字符串。
在我看来,值转换器是通用的,不能为不同的目的地返回不同的值。这意味着要自动更改三个标题,我需要三个不同的值转换器,为每个菜单项返回适当的字符串。这似乎根本不是最佳选择。
理想情况下,当文本字段的值大于一或类似的值时,我能够将存储在目标菜单项(假设在项目的标签属性中)中的字符串与值转换器中的“s”组合起来将使我能够对所有菜单项使用单值转换器。
是不是我漏掉了什么?什么是理想的解决方案?
最佳答案
好吧,这可能不是一个理想的解决方案,但你可以考虑一下:如果你从代码中设置值转换器(而不是在 IB 中),你可以实例化同一类的 3 个不同的转换器。你可以给你的值转换器一个 ivar NSString *unit
(并添加类似 [[MyValueTransformer alloc] initWithUnit:]
的内容)以允许每个返回自己的字符串,但您仍然只需编写一次值转换器的代码。
(另外,如果您打算考虑使您的应用程序可本地化,那么简单地附加一个“s”来创建复数形式是行不通的。您当然可以为 NSString *singular
和 NSString *plural
添加 ivars来做到这一点。)
编辑:等等,我刚刚意识到你可以注册值转换器!如果您将它们注册为 MyValueTransformerHours
和MyValueTransformerMinutes
(通过在代码中手动alloc
ating和init
ializing它们),您可以从Interface Builder中使用它们。另请参阅https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ValueTransformers/Concepts/Registration.html#//apple_ref/doc/uid/20002166-BAJEAIEE .
关于objective-c - 如何使用单个 NSValueTransformer 子类切换多个菜单项的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3809161/