# Comment remplir un NSPopUpButton ?



## DVP (22 Mars 2010)

Bonjour

Je débute en programmation sur mac, et je rencontre un probleme qui doit etre tout bête, mais sur lequel je seche depuis plusieurs jours.

Voilà le contexte:
Je veux faire lancer un calcul à partir de données saisie dans la fenêtre de mon programme. (un calcul du credit)
J'ai donc plusieurs NSTextField pour saisir les différentes valeurs neccesaire à mon calcul, et pour la durée du crédit j'affiche un champ texte suivi d'une drop down pour choisir si le champ texte contient des années ou des mois.
En gros pouvoir rentrer "10 ans" ou "120 mois"

Mon probleme porte sur cette drop down.

J'ai chois un NSPopUpButton car je veux restreindre le choix aux elements de ma liste et ne pas permettre la saisie de valeurs par l'utilisateur (si j'ai bien compris, c'est ce qui differencie un NSPopUpButton  d'un NSComboBox) 

J'ai donc un NSPopUpButton  dans Interface Builder.
Dans le .h de mon application j'ai un IBOutlet qui lui correspond:

```
IBOutlet NSPopUpButton *maDropDown;
```
Dans IB j'ai liée le NSPopUpButton à la variable maDropDown de mon application.

Dans le .m de mon application, je cherche à remplir mon popup button avec ma liste {mois, années} au moment ou l'appli est lancée.

J'ai donc fait ceci: (à partir d'exemples chopées ici et la sur le net)


```
-(id)init
{
    [super init];
    listeTypes=[[NSArray alloc] initWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:@"mois", @"name", @"m", @"value", nil],[NSDictionary dictionaryWithObjectsAndKeys:@"années", @"name", @"a", @"value", nil], nil];
    [maDropDown addItemsWithTitles:listeTypes ];
    return self;
}
```
Mais ca ne marche pas... mon popup button reste vide.

Alors soi j'ai oublié un truc, soit je fait quelque chose de travers, mais j'aimerai bien savoir quoi.
Si quelq'uun peu m'aider... 

Merci


----------



## Diablovic (22 Mars 2010)

Tu débutes en programmation sur mac ou en programmation tout court ?

Ca marcherait sans doute mieux en utilisant correctement addItemsWithTitles.
Tu lui files une NSArray contenant des NSDictionary.
Selon la doc, il faudrait des NSString

Ah ok, tu as utilisé cette source, mais sans rien comprendre.


----------



## DVP (22 Mars 2010)

Diablovic a dit:


> Tu débutes en programmation sur mac ou en programmation tout court ?


Sur mac seulement, jusqu'à présent je n'ai fait que du J2E



Diablovic a dit:


> Ca marcherait sans doute mieux en utilisant correctement addItemsWithTitles.
> Tu lui files une NSArray contenant des NSDictionary.
> Selon la doc, il faudrait des NSString


Au temps pour moi, j'aurai du lire plus attentivement la doc :rose:



Diablovic a dit:


> Ah ok, tu as utilisé cette source, mais sans rien comprendre.


T'es pas loin de la verité 

En tous cas, merci, je vais essayer des ce soir de faire un array de NSStrings.


----------



## DVP (24 Mars 2010)

Hop, me revoilà avec la solution.

Effectivement c'était tout simple:

- (void)awakeFromNib
{
	[dropDown removeAllItems]; // Pour virer les Item1, Item 2 et Item 3 mis par interface builder
	[dropDown addItemWithTitle"mois"]; // pour rajouter une entrée
	[dropDown addItemWithTitle"années"]; // et une seconde.
}


Enuite un 

NSString *choix=[dropDown titleOfSelectedItem];

permet de récupérer le texte sélectionné 

J'imagine que ca n'est pas la meilleure methode, remplir le NSPopupButton avec un tableau contenant la liste des items de choix puis se baser sur l'index (via indexOfSelectedItem) pour savoir ce qui a été choisi doit etre mieux.


----------



## tatouille (25 Mars 2010)

DVP a dit:


> Hop, me revoilà avec la solution.
> 
> Effectivement c'était tout simple:
> 
> ...



on ne se fit jamais awakeFromNib imagine si ton popup et dans un autre nib que tu load dans le main nib?

// [dropDown removeAllItems];

fais le dans le nib...


----------

