[Résolu] problème pour l'utilisation de la classe NSPopUpButton

prepa75prepa75 Membre
mars 2010 modifié dans API AppKit #1
Bonjour à  tous,

je suis en train de coder un programme qui permet à  l'utilisateur de choisir une des 4 opération élémentaires et en fonction de son choix,  deux nombres aléatoires sont additionnés (ou soustraits....) .l'utilisateur rentre le résultat , et le score évolue en fonction.

tout ce qui concerne le codage de l'opération il n'y a pas de souci , l'utilisation des boutons se fait très bien etc....

Mais là  ou il y a un hic c'est sur l'utilisation d'une fenêtre déroulante.j'ai essayer de tester des lignes de codes vu sur le forum mais malheureusement je ne comprend pas du tout comment ça fonctionne.

je ne pense pas que poster mon code source sera utile vu que il marche,il me faudrai juste un bout de code sur l'utilisation d'une fenêtre déroulante.

Merci par avance parce que là  je cale. :'(

Réponses

  • NseaProtectorNseaProtector Membre
    20:38 modifié #2
    Bonjour et bienvenue, aurais tu regardé dans la doc d'Apple ?
    L'exemple ButtonMadness montre entre autre l'utilisation des popups.
    http://developer.apple.com/mac/library/samplecode/ButtonMadness/index.html#//apple_ref/doc/uid/DTS10004430
  • prepa75prepa75 Membre
    mars 2010 modifié #3
    merci pour ton lien et ta réponse aussi rapide,

    je l'ai entre-aperçu et je pense qu'il devrai pouvoir combler mes attentes,même si analyser le code à  mon niveau va me prendre toute la soirée :)je m'en occupe demain soir parsque étant en prépa j'ai pas trop de temps libre :'( >:)

    si j'ai un souci je te fait signe

    bonne soirée...

  • NseaProtectorNseaProtector Membre
    20:38 modifié #4
    N'hésite pas a nous demander de t'aider a comprendre les lignes de code... Travail bien.
  • prepa75prepa75 Membre
    20:38 modifié #5
    Merci pour ta proposition,

    mais jvais essayer d'en faire le plus possible tout seul pour vraiment bien comprendre; même si vu la geule du code il y a de forte chance que je crie à  l'aide rapidement  :'(
  • prepa75prepa75 Membre
    20:38 modifié #6
    euh... AU SECOURS  :(

    jsuis fier de moi j'ai essayer tout seul mais le code source est tellement dense que jme suis perdu B)

    donc je vais vous dire ce que j'ai compris et vous allez me dire si c'est bon :

    voici le fichier .h

    <br />	<br />	//==================================================<br />	// NSPopUpButton<br />	<br />	// nib based controls<br />	IBOutlet	NSPopUpButton*		nibBasedPopUpDown;<br />	IBOutlet	NSPopUpButton*		nibBasedPopUpRight;<br />	<br />	IBOutlet	NSBox*				popupBox;<br />	IBOutlet	NSMenu*				buttonMenu;<br />	<br />	// code based controls<br />	IBOutlet	NSView*				placeHolder1;	// the anchor/reference place for the code-based popup<br />				NSPopUpButton*		codeBasedPopUpDown;<br />				<br />	IBOutlet	NSView*				placeHolder2;<br />				NSPopUpButton*		codeBasedPopUpRight;<br />	<br />	//==================================================<br /><br />	<br />
    


    donc il y a 2 pointeurs qui a priori correspondent à  chaque fenêtre.
    donc pour mon cas simple je dois avoir un seul pointeur a priori c'est ça??

    et la dans le fichier.m c'est carrément l'apocalypse... 


    //===============================<br />	// NSPopupButton<br /><br />	// create the pull down button pointing DOWN<br />	NSRect buttonFrame = [placeHolder1 frame];<br />	codeBasedPopUpDown = [[NSPopUpButton alloc] initWithFrame:buttonFrame pullsDown:YES];&nbsp; &nbsp; &nbsp; //la a priori il libere de la ram?<br />	[[codeBasedPopUpDown cell] setArrowPosition:NSPopUpArrowAtBottom];	&nbsp; <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /*la il cré un tableau pour recevoir les différents choix du menu??*/<br /><br />	[[codeBasedPopUpDown cell] setBezelStyle:NSSmallIconButtonBezelStyle];<br />	NSMenu* popupButton = [[buttonMenu copy] autorelease];	// copy the menu for this button<br />	[codeBasedPopUpDown setMenu: popupButton];<br />	[popupBox addSubview:codeBasedPopUpDown];<br />	[placeHolder1 removeFromSuperview];	// we are done with the place holder, remove it from the window<br />	<br />	// create the pull down button pointing RIGHT<br />	buttonFrame = [placeHolder2 frame];<br />	codeBasedPopUpRight = [[NSPopUpButton alloc] initWithFrame:buttonFrame pullsDown:YES];<br />	[[codeBasedPopUpRight cell] setArrowPosition:NSPopUpArrowAtBottom];<br />	[codeBasedPopUpRight setPreferredEdge:NSMaxXEdge];	// make the popup menu appear to the right<br />	[[codeBasedPopUpRight cell] setBezelStyle: NSShadowlessSquareBezelStyle];<br />	NSMenu* pullDownMenu = [[buttonMenu copy] autorelease];	// copy the menu for this button<br />	[codeBasedPopUpRight setMenu: pullDownMenu];<br />	[[codeBasedPopUpRight cell] setHighlightsBy:NSChangeGrayCellMask];<br />	[popupBox addSubview:codeBasedPopUpRight];<br />	[placeHolder2 removeFromSuperview];	// we are done with the place holder, remove it from the window<br />	<br />	// copy the menu again for &#39;nibBasedPopUpRight&#39; control<br />	NSMenu* copiedMeu = [[buttonMenu copy] autorelease];<br />	[nibBasedPopUpRight setMenu:copiedMeu];<br />
    


    il y a tellement de classes et de méthodes que je ne connais pas que la je suis perdu !

    1 - à  quoi ça sert de copier le menu?
    2 - quelle est la difference entre pull down et pull up ?
    3 - a quoi sert cette ligne : [codeBasedPopUpDown setMenu: popupButton]; ?

    si quelqu'un pouvait me dire concretement ce que je dois mettre dans mon .h et mon .m pour utiliser la classe NSPopUpButton ça serais cool.je souhaite juste pouvoir selectionner  une des 3 possibilités.Parsque je me doute bien qu'il ne faut pas tout ça pour coder une simple fenêtre , si c'est le cas je préfere arréter tout de suite  B)



  • mpergandmpergand Membre
    20:38 modifié #7
    Un NSPopUpButton se gère de la même façon qu'un NSButton et dans la méthode action, on récupère l'élément de menu sélectionné:
    -(void) popUpAction:(NSPopUpButton*) popUpButton<br />{<br />	printf(&quot;%d &#092;n&quot;,[popUpButton indexOfSelectedItem]);&nbsp; // no de l&#39;élément de menu sélectionné<br />}
    



  • prepa75prepa75 Membre
    20:38 modifié #8
    en fait je ne sais pas encore gérer un NSbutton  :)

    voici le code que j'ai tapé et j'ai droit à  l'erreur suivante : Local declaration of 'popupbutton' hides instance variable.


    -(void) popupaction:(NSPopUpButton *)popupbutton<br />{<br />	choixopp == [popupbutton indexOfSelectedItem];<br />printf(&quot;%d &#092;n&quot;,choixopp); <br />}<br />
    


    j'ai relier le pointeur popupbutton à  ma fenetre déroulante et le printf n'affiche rien dans la console.
  • prepa75prepa75 Membre
    20:38 modifié #9
    bon 2 erreurs de débutants :

    1 : = et non pas ==;
    2 : j'ai oublier de mettre -(void) popupaction:(NSPopUpButton *)popupbutton; dans le .h

    mais ça ne marche toujours pas...

    merci de votre aide.
  • prepa75prepa75 Membre
    mars 2010 modifié #11
    merci pour ton lien mpergand, en fait j'avais pas fait le lien parsque j'arrive a utiliser un NSButton je me suis trompé ! désolé pour ma noubinerie  :)

    par contre j'aurai besoin d'une petite explication  pour la méthode suivante : - (IBAction)myAction:(id)sender;

    IBAction signifie que l'on souhaite que cette action se fasse lors d'un événement (boutton par ex...)
    myaction correspond au nom de la méthode que l'on souhaite mettre
    par contre (id) je ne sais pas ce que ça signifie , et pareil pour sender.je met sender par defaut mais j'aimerai bien savoir à  quoi ça correspond.




  • prepa75prepa75 Membre
    20:38 modifié #12
    c'est bon ça marche  :D

    en fait il fallait que ce soit un (IBAction) au lieu d'un (Void). c'est logique vu qu'il faut que l'on choisisse la fenêtre déroulante...

    une dernière question : comment fait-on pour rajouter des cases à  la fenêtre ? si un jour je veux mettre la division comme choix.

  • CéroceCéroce Membre, Modérateur
    20:38 modifié #13
    dans 1268767932:

    par contre j'aurai besoin d'une petite explication  pour la méthode suivante : - (IBAction)myAction:(id)sender;

    IBAction est synonyme de void, mais permet à  Interface Builder de repérer les actions.
    (De la même manière, IBOutlet est synonyme de id).
    sender est l'objet qui a envoyé le message, ce sera donc ton NSPopUpButton dans ton cas (à  transtyper si besoin).

    Achète-toi d'urgence ce livre si tu ne l'as pas déjà .
  • AliGatorAliGator Membre, Modérateur
    20:38 modifié #14
    Petite coquille de la part de Céroce : si IBAction est bien synonyme de void, IBOutlet est synonyme de... rien ([tt]#define IBOutlet[/tt]) du coup c'est remplacé par une chaà®ne vide dans le code par le précompilateur.

    Ces deux mots clés ne sont en effet utilisés que pour permettre à  InterfaceBuilder de détecter les actions et les outlets, respectivement, quand il parse les fichiers .h pour t'exposer ces actions et outlets.

    Voilà  tout plein de lecture dans la doc Apple, avec ça tu trouveras forcément ton bonheur et toutes les explications détaillées nécessaires :
    - Communication with objects : les Outlets, The Target-Action Mechanism
    - Control and Cells Programming Topics : Introduction to Buttons
    - Defining Outlets and Actions in Xcode
  • CéroceCéroce Membre, Modérateur
    20:38 modifié #15
    dans 1268819139:

    Petite coquille de la part de Céroce : si IBAction est bien synonyme de void, IBOutlet est synonyme de... rien

    Exact, petite erreur de ma part. Pour sauter à  la définition d'un symbole sous XCode, on peut le double-cliquer en maintenant la touche Commande appuyée.
  • prepa75prepa75 Membre
    20:38 modifié #16
    merci pour vos réponses , je pense avoir compris la structure d'une méthode.

    @Céroce : concernant le livre je me le suis procuré, même si je ne comprend pas forcément toutes les explications qui s'y trouvent.
    je trouve qu'il faut avoir des bonnes connaissances de base pour aprés pouvoir traiter les exemples illustrés.En feuilletant la doc fourni par AliGator je pense combler mes petites lacunes et attaquer le bouquin en ayant des chances de comprendre.Et puis ce sera une bonne raison pour me mettre à  l'anglais  :(

    pour revenir au double-clique,ça ramene à  rechercher dans la documentation en fait...mais c'est pratique 

    une fois mon application finie pourrais-je la postée dans la section adéquate,histoire d'avoir des retours, des idées d'amélioration?

  • prepa75prepa75 Membre
    20:38 modifié #17
    dans 1268769080:


    une dernière question : comment fait-on pour rajouter des cases à  la fenêtre ? si un jour je veux mettre la division comme choix.


    quelqu'un pourrai m'indiquer succinctement la solution? :)

    merci par avance pour votre aide...
  • prepa75prepa75 Membre
    20:38 modifié #18
    c'est bon j'ai trouver tout seul  :P

    je me demander justement à  quoi servait les menuitems  ::)
  • NseaProtectorNseaProtector Membre
    20:38 modifié #19
    dans 1268829079:

    merci pour vos réponses , je pense avoir compris la structure d'une méthode.

    @Céroce : concernant le livre je me le suis procuré, même si je ne comprend pas forcément toutes les explications qui s'y trouvent.
    [...] Et puis ce sera une bonne raison pour me mettre à  l'anglais  :(


    Anglais ? Il est en Français ! Ca sent le pdf ...

  • prepa75prepa75 Membre
    20:38 modifié #20
    dans 1269066401:


    Anglais ? Il est en Français ! Ca sent le pdf ...


    non non pas du tout je suis allé l'acheter à  la fnac la semaine dernière,pour l'anglais je parlais de la doc fournie par Aligator,vu qu'elle est en anglais.par contre même si le book est en français les lignes de codes sont en anglais et c'est un peu décevant,en effet meme si toute les methodes integrées dans xcode sont en anglais(ce qui est normal...),les variables choisies dans le livre pourraient etre en français,parsque ayant aucune connaissance en obj-C au debut je me suis embrouillé entre tout ces mots anglais.MAis maintenant que j'arrive plus ou moins a utiliser la documentation(qui est en anglais),je commence a trouver l'utilité du livre.parsque j'avais peur d'avoir acheter un livre a 40€ qui me servirai pas !! 
Connectez-vous ou Inscrivez-vous pour répondre.