2010-01-11 20 views
0

Cette question est similaire à celui-ci: How do I use an NSFormatter subclass with an NSPopUpButtonUn NSFormatter peut-il être utilisé avec un NSPopUpButton?

Comme mentionné dans cette question, il semble que le « formatter » utilisé par la cellule d'un NSPopUpButton ne semble pas fonctionner. Je me demande si cela est prévu, ou si le paramétrage d'un NSPopUpButton est réellement utile.

À l'heure actuelle, j'ai un objet NSPopUpButton dont les "objets de contenu" sont liés aux objets arrangés d'un NSArrayController dont "Content Array" est un NSArray de NSNumbers. Définir le formateur de la cellule NSPopUpButton sur un NSNumberFormatter simple qui formate NSNumbers dans un format monétaire ne fonctionne pas; le menu contextuel affiche les nombres non formatés.

Je me demande comment je peux formater les chaînes affichées dans le menu contextuel d'un NSPopUpButton? Je pense que cela devrait être assez simple; avoir à utiliser un transformateur de valeur, ou une valeur spéciale pour le chemin d'affichage, semble être trop lourd et devrait être plus facile.

Merci d'avance.

Répondre

0

Si la cellule n'honore pas le formateur, vous pouvez fournir une propriété alternative comme -formattedCost par opposition à -cost. Rien de sophistiqué n'est nécessaire puisque les éléments de menu d'un bouton contextuel ne sont pas modifiables par l'utilisateur.

Votre propriété -formattedCost utilise une instance NSNumberFormatter partagée et renvoie la chaîne au format approprié de -cost.

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

La propriété "formattedCost" correspond à ce que vous souhaitez lier à l'affichage. Des mises en garde supplémentaires: vous devez enregistrer la clé "formattedCost" comme étant dépendante de la clé "cost". De cette façon, lorsque les coûts sont modifiés, votre popup sera mis à jour (car cela déclenchera aussi "formattedCost").

+0

Merci Joshua. Votre suggestion fonctionnera certainement, mais je pense qu'il devrait y avoir un moyen plus facile d'accomplir cela. Avec votre suggestion, je ne serais plus en mesure d'avoir le contenu du bouton NSPopUp être un simple NSArray de NSNumbers. Comme vous l'avez mentionné, il y a quelques mises en garde supplémentaires à propos de votre suggestion, que je voudrais éviter et que j'ai simplement quelque chose de très simple et facile à travailler. Il est très étrange que NSPopUpButton n'honore pas le formateur, après tout quoi d'autre pourrait-il être utilisé? –