【问题标题】:Can a NSFormatter be used with a NSPopUpButton?NSFormatter 可以与 NSPopUpButton 一起使用吗?
【发布时间】:2010-01-11 01:13:11
【问题描述】:

这个问题和这个问题类似:How do I use an NSFormatter subclass with an NSPopUpButton

正如该问题中所述,NSPopUpButton 的单元格使用的“格式化程序”似乎不起作用。我想知道这是否是预期的,或者是否真的有设置 NSPopUpButton 的格式化程序的目的。

现在,我有一个 NSPopUpButton,其“内容对象”绑定到 NSArrayController 的排列对象,其“内容数组”是 NSNumber 的 NSArray。将 NSPopUpButton 单元格的格式化程序设置为一个简单的 NSNumberFormatter 将 NSNumbers 格式化为货币格式是行不通的;弹出菜单显示未格式化的数字。

我想知道如何格式化 NSPopUpButton 的弹出菜单中显示的字符串?我觉得这应该是相当直截了当的;必须使用值转换器或显示路径的特殊值,似乎有点矫枉过正,应该更容易。

提前致谢。

【问题讨论】:

    标签: cocoa nspopupbutton nsformatter


    【解决方案1】:

    如果单元格不支持格式化程序,那么您可以提供替代属性,例如 -formattedCost 而不是 -cost。不需要任何花哨的东西,因为弹出按钮的菜单项不是用户可编辑的。

    您的 -formattedCost 属性将使用共享的 NSNumberFormatter 实例并返回格式正确的 -cost 字符串。

    - (NSString *)formattedCost
    {
        return [mySharedCurrencyFormatter stringFromNumber:[self cost]];
    }
    

    “formattedCost”属性是您为显示而绑定的。其他注意事项:您需要将“formattedCost”键注册为依赖于“cost”键。这样,当成本发生变化时,您的弹出窗口也会更新(因为这也会触发“formattedCost”的变化)。

    【讨论】:

    • 谢谢约书亚。你的建议肯定会奏效,但我觉得应该有一种更简单的方法来实现这一点。根据您的建议,我将不再能够让 NSPopUpbutton 的内容成为一个简单的 NSArray 的 NSNumbers。正如您所提到的,您的建议还有一些额外的警告需要担心,我想避免这些警告,只是提供一些非常简单且易于使用的东西。 NSPopUpButton 不支持格式化程序,这很奇怪,毕竟它还能用来做什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2018-02-16
    • 2020-06-30
    • 2014-11-15
    • 2011-12-07
    • 2011-11-20
    相关资源
    最近更新 更多