Question sur la Gestion du NSPopUpButton
Patyom
Membre
Bonsoir,
J'ai un petit souci pour utiliser mes PopUPButton, pourriez-vous m'aiguiller.
En fait, je dois alimenter des popubuttons avec une liste de valeurs et ensuite je dois cumuler toutes les valeurs sélectionnées dans chaque Popupbutton pour les mettre dans un fichier.
J'ai du mal à comprendre la chose.
A+
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu ajoutes des items via addItemWithTitle par exemple... Les titles sont des NSString, donc tu mets ce que tu veux dedans.
Si tu dois accrocher un entier (par exemple) à ton item, il faut utiliser le tag des NSMenuItem qui composent le menu du popUp.
Après je comprends pas très bien ce que tu demandes, mais tu accèdes à l'item sélectionné via selectedItem qui est (souvent) un NSMenuItem, dont tu peux lire les title, tag, etc.
En fait, ce n'est pas très compliqué, il suffit de créer les NSPopupButtons (ou de tirer des outlets) et d'appeler addItems(withTitles:).
Ensuite, consulte .indexOfSelectedItem pour savoir quel article est sélectionné.
On peut tout faire dans un XIB/Storyboard si les articles sont toujours les mêmes.
Merci à vous deux,
J'ai pas mal avancé sur le sujet et effectivement je vais dans le chemin que vous me donnez.
Une question : peut-on remplir le PopUpButton au moment où l'on clique dessus ?
j'arrive à le faire quand je relâche la souris après mon choix mais c'est trop tard je suis obligé de reclouer pour avoir la liste.
Pas terrible !
Alors de mémoire (et à vérifier), tu peux créer une classe qui hérite de NSPopUpButton et tu surcharge la fonction mouseDown :
Il ne faut pas oublier d'appeler [super mouseDown] en fin de fonction parce que c'est là que la boucle de gestion du clic sur le bouton est lancée.
en Swift comment se programme la ligne :
Sorry,
J'ai la réponse :
ha ouai, désolé... Swift, c'est pas trop mon truc
J'attends la compatibilité avec C/C++ pour y passer... Peut-être jamais...
Oui pourquoi parce que je ne vois pas ce qui t'empêche de remplir le menu avant le clic.
Pour des raisons qui seraient un peu longue à expliquer, il faut que je remplisse au moment du clic.
Bon, je suis arrivé à le faire mais maintenant je me heurte une fois de plus aux chaines des caractères, quelle poisse.
Je m'explique :
les chiffres que je stocke dans mes PopUpButton doivent être des Strings de ce type "8356,3", avec 1 chiffre après la virgule.
Au départ, avant de créer la liste, mon chiffre peut-être comme suit,
"8356", "8356,3", "8356,35"
et après traitement :
"8356,0", "8356,3", "8356,3"
Je me suis embarqué dans un truc, je suis perdu
mon code
Pas certain de comprendre la question : est-ce que tu connais le chiffre ou n'est-il présent, déjà formaté, que dans la chaine ?
Si tu connais le chiffre, tu peux utiliser le formatage intégré à NSString :
qui impose un chiffre après la virgule.
Sinon tu peux utiliser un NSNumberFormatter, qui te permettra plus de souplesse (notamment de remplacer le point par la virgule, etc.).
Si ce chiffre n'est présent que dans le titre des items de ton popUp, ne peux-tu les stocker dans un tableau en //, et utiliser l'index de l'item ou son tag pour y accéder ? Recomposer une chaine en partant des valeurs des chiffres sera sans doute plus simple (et logique en ne stockant pas d'information dans une vue et donc en respectant le paradigme MVC).
À essayer mais dans Interface Builder, tu dois pouvoir glisser un NSNumberFormatter sur ton NSPopUpButton.
NSPopUpButtonCell hérite de NSCell qui a une propriété .formatter.
Tout d'abord, ne stock pas les valeurs numériques en String !
Dans to exemple tu as déjà fait un bêtise en transformant "8356,35" en "8356,3". Normalement, l'arrondissage des chiffres qui se termine en 5 ou plus devrait passer au prochain chiffre - "8356,35" en "8356,4"
Si tu as stocké les valeurs en Double, tu n'aurais pas ce type de problème.
Le NSPopupButton n'est pas la pour stocker les valeurs, seulement pour les afficher, les transformant si nécessaire.
Pour être notifier avant le popup, il faut capter la notification :
... et faire le remplissage dans la méthode qui la capte.
Code exemple :
C'est trop compliqué pour moi, je plane !
c'est peut-être pas ma journée
Oui, c'est compliqué mais c'est plus correcte d'utiliser les bindings pour le remplir.