Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何使用单个NSValueTransformer子类切换多个菜单项的标题_Objective C_Cocoa_Interface Builder_Cocoa Bindings - Fatal编程技术网

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

Objective c 如何使用单个NSValueTransformer子类切换多个菜单项的标题,objective-c,cocoa,interface-builder,cocoa-bindings,Objective C,Cocoa,Interface Builder,Cocoa Bindings,我想做一些绑定,根据文本字段中的单个数值在弹出菜单中切换项目标题。让我解释一下: 这是我的用户界面: 我希望我的菜单项根据文本字段中的数字自动调整为单数或复数。例如,当我在框中键入“1”时,我希望菜单项标记为“分钟”、“小时”和“天”。当我输入“4”时,我希望菜单项标记为“分钟”、“小时”和“天” 我到目前为止做了什么: 我将三个菜单项的标签绑定到与文本字段值相同的键路径 我创建了一个NSValueTransformer子类来解释文本字段中的值,并返回单数或复数作为项目标题 我将此值转换器应

我想做一些绑定,根据文本字段中的单个数值在弹出菜单中切换项目标题。让我解释一下:

这是我的用户界面:

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

我到目前为止做了什么:

  • 我将三个菜单项的标签绑定到与文本字段值相同的键路径
  • 我创建了一个NSValueTransformer子类来解释文本字段中的值,并返回单数或复数作为项目标题
  • 我将此值转换器应用于三个绑定
  • 问题:

    My value transformer可以返回单数或复数,但它无法根据应用到的菜单项设置适当的字符串

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

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


    我错过了什么吗?什么是理想的解决方案?

    好的,这可能不是理想的解决方案,但您可以考虑:如果您从代码(而不是在IB中)设置值转换器,您可以实例化同一类的3个不同的转换器。您可以给您的值转换器一个ivar
    NSString*单位
    (并添加类似于
    [[MyValueTransformer alloc]initWithUnit:
    )的内容,以允许每个值转换器返回自己的字符串,但您仍然只需编写一次值转换器的代码

    (也就是说,如果你要考虑让你的应用程序本地化,只需加上一个“S”来创建复数就不起作用了。当然,你可以添加IVARS,用于<代码> NScord*MultUng/Cuff>和<代码> NScord*复数< /代码>。



    等等,我刚刚意识到你可以注册值转换器!如果将它们注册为
    MyValueTransformerHours
    MyValueTransformerMinutes
    (通过在代码中手动
    alloc
    ating和
    init
    序列化它们),则可以从Interface Builder使用它们。另请参见。

    太棒了!你的编辑正是我需要的。这不是一个无代码的解决方案,但它非常接近。谢谢