代码之家  ›  专栏  ›  技术社区  ›  Form

如何使用单个NSValueTransformer子类切换多个菜单项的标题

  •  0
  • Form  · 技术社区  · 14 年前

    这是我的用户界面:

    a text field and a pop up menu

    the pop up menu

    我想我的菜单项自动调整为单数或复数的基础上,在文本字段的数字。例如,当我在框中键入“1”时,我希望菜单项被标记为“分钟”、“小时”和“天”。当我键入“4”时,我希望菜单项被标记为“分钟”、“小时”和“天”。

    我迄今为止所做的:

    1. 我将这个值转换器应用于三个绑定。

    我的值转换器可以返回单数或复数,但它无法根据应用它的菜单项设置适当的字符串。

    在我看来,值转换器是通用的,不能为不同的目的地返回不同的值。这意味着要使三个标题自动更改,我需要有三个不同的值转换器,为每个菜单项返回适当的字符串。这似乎一点也不理想。

    理想情况下,当文本字段的值大于1时,我可以将存储在目标菜单项中的字符串(比如在项的标记属性中)与值转换器中的“s”组合起来,或者类似的东西,使我能够对所有菜单项使用单个值转换器。

    1 回复  |  直到 14 年前
        1
  •  1
  •   xnyhps    14 年前

    好吧,这可能不是一个理想的解决方案,但是您可以考虑:如果您从代码中设置值转换器(而不是在IB中),您可以实例化同一类的3个不同的转换器。你可以给你的价值转换器一个ivar NSString *unit (然后加上 [[MyValueTransformer alloc] initWithUnit:]

    (另外,如果您打算考虑使应用程序可本地化,那么简单地附加一个“s”来创建复数是行不通的。当然,您可以为这两个添加ivar NSString *singular NSString *plural 这样做。)


    编辑:等等,我刚刚意识到你可以注册值转换器!如果你把它们注册为 MyValueTransformerHours MyValueTransformerMinutes (手动) alloc 吃东西 init 可以 从Interface Builder中使用它们。另请参见 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ValueTransformers/Concepts/Registration.html#//apple_ref/doc/uid/20002166-BAJEAIEE