NSFormatter可以与NSPopUpButton一起使用吗?

问题描述:

这个问题是类似这样的:How do I use an NSFormatter subclass with an NSPopUpButtonNSFormatter可以与NSPopUpButton一起使用吗?

如在该问题中提到,它似乎像使用一个NSPopUpButton的细胞似乎不工作“格式化”。我想知道这是否是预期的,或者实际上是否有设置NSPopUpButton的格式化程序的目的。

现在,我有一个NSPopUpButton,它的“内容对象”绑定到NSArrayController的一个NSArrayController,它的“Content Array”是一个NSNray的NSArray。将NSPopUpButton单元格的格式化程序设置为以货币格式格式化NSNumber的简单NSNumberFormatter不起作用;弹出菜单显示未格式化的数字。

我在想如何格式化字符串显示在NSPopUpButton的弹出菜单中?我觉得这应该是相当直接的;不得不使用值转换器或显示路径的特殊值,似乎过度杀伤,应该更容易。

在此先感谢。

如果单元格不支持格式化程序,那么您可以提供另一个属性,如-formattedCost而不是-cost。由于弹出按钮的菜单项不是用户可编辑的,因此不需要任何花哨。

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

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

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

+0

谢谢约书亚。你的建议肯定会奏效,但我觉得应该有一个更简单的方法来实现这一点。根据你的建议,我将不再能够将NSPopUpbutton的内容作为NSNumbers的简单NSArray。正如你所提到的,还有一些额外的注意事项需要关注你的建议,我想避免这些建议,只是有一些非常简单和容易处理的事情。奇怪的是,NSPopUpButton没有兑现格式化器,毕竟还有什么可以使用的呢? – 2010-01-12 04:38:21