Menu dans un NSSearchField

VeillardVeillard Membre
02:29 modifié dans API AppKit #1
Eh oui, toujours avec ma fonction de recherche  :)
La question est la suivante : j'ai glissé un NSSearchField dans ma fenêtre, j'ai fait tout ce qu'il faut, tout fonctionne mais j'ai vu certaines applis dont Xcode avec un menu déroulant dans la SearchField. J'ai essayé avec IB => rien.
Comment fait-on ? ???

Merci à  tous

Réponses

  • BaardeBaarde Membre
    02:29 modifié #2
    Tu relis l'outlet searchMenuTemplate de ton NSSearchField à  un NSMenu. ;)

    [Fichier joint supprimé par l'administrateur]
  • VeillardVeillard Membre
    02:29 modifié #3
    Merci, j'avais pas essayé cette option 
  • 02:29 modifié #4
    je confirme, il faut bien relié ton NSSearchField à  to searchMenuTemplate!!
    tu peux aussi le faire par programmation :

    [[mySearchfield cell] setSearchMenuTemplate:mySearchMenu];
  • VeillardVeillard Membre
    02:29 modifié #5
    OK, je n'ai plus qu'à  gérer mes menus 
  • VeillardVeillard Membre
    02:29 modifié #6
    Bon, j'ai autre problème.  :-\\
    Mes items de menu sont désactivés. Dans ce cas précis, comment les relier ? et surtout à  quoi. ???

    Pour info, avant, j'utilisais un NSPopUpMenu avec pour chaque item, un tag. Je retrouvais le tag que j'utilisais dans :
    switch ([[searchChoicePopUp selectedItem] tag])<br />	{<br />		case 0:<br />			champ = @&quot;palanquee&quot;;<br />		break;<br />		<br />		case 1:<br />			champ = @&quot;epaves&quot;;<br />		break;<br />		...<br />
    
  • Eddy58Eddy58 Membre
    décembre 2004 modifié #7
    Je ne sais pas si par "activation", tu entends qu'ils ne sont pas disponibles à  la sélection, mais si c'est le cas, essaies ceci Favouille, et normalement tes items devraient être activés : ;)
    <br />[mySearchMenu setAutoenablesItems:NO];<br />
    
  • VeillardVeillard Membre
    02:29 modifié #8
    Ca ne marche pas  :'(
  • Eddy58Eddy58 Membre
    02:29 modifié #9
    Le faites est que je ne cerne pas correctement ton problème : ???

    Est-ce que tu peux sélectionner les items de ton menu actuellement et donc tu cherches à  récupérer le résultat de la sélection, ou est-ce que tu ne peux pas du tout faire de sélection (items du menu en mode disabled) ?
  • VeillardVeillard Membre
    02:29 modifié #10
    J'ai mis une copie d'écran. Ce que je cherche à  faire, c'est rechercher un mot clé par thème (voir copie). Chaque thème que j'appelle "champ" fait partie d'un NSDictionary.

    Avec :
    tempString = [[tableauDesPlongees objectAtIndex:i] valueForKey: champ];<br />
    


    Je récupère la string en fonction du champ que j'ai préalablement sélectionné dans le menu, ce que je faisais avant avec un NSPopUpButton...

    [Fichier joint supprimé par l'administrateur]
  • BaardeBaarde Membre
    02:29 modifié #11
    Chez moi non plus ça ne fonctionne pas avec un menu créé dans IB. Par contre quand je crée le menu dans mon code ça fonctionne.
    Essai ceci : Specifying a Search Category
  • Eddy58Eddy58 Membre
    02:29 modifié #12
    Effectivement le code que je t'ai passé au-dessus fonctionne bien avec des menus faits par programmation, je comprend pas pourquoi il fonctionne pas avec des menus faits dans IB... ???
    Quoiqu'il en soit, NLDBC te fourni un bon lien pour faire tes menus par programmation... :)
  • BaardeBaarde Membre
    décembre 2004 modifié #13
    Mais là  on est pas encore sorti de l'auberge. Je suppose que quand on sélectionne un item, il faut mettre l'état des autres sur Off.
    [[[[searchField cell] searchMenuTemplate] itemAtIndex:0] setState:NSOffState];
    

    Ben ça marche pas ! ???

    EDIT : J'ai trouvé !
    - (IBAction)limitSearch:(id)sender<br />{<br />    [curItem setState:NSOffState];<br /> &nbsp;  [sender setState:NSOnState];<br />    curItem = sender;<br />}<br />
    
  • VeillardVeillard Membre
    02:29 modifié #14
    Je suppose que "curItem" est un NSMenuItem...
    Comment tu le relies sachant qu'il y en a plusieurs ???
    NSMenuItem *curItem1, curItem2, curItem3...
    

    Autre chose, une fois que les items sont créés, il faut leur donner une action. Or, ma méthode (ci-dessous) est connectée au NSSearchField : elle est appelée à  chaque fois que je tape une lettre .

    - (IBAction)findInDive:(id)sender<br />{<br />	NSString *champ = [[NSString alloc] init];<br />	<br />	switch (le tag du curMenuItem) &lt;---------- Comment faire ?<br />	{<br />		case 0:<br />			champ = @&quot;partenaires&quot;;<br />		break;<br />		<br />		case 1:<br />			champ = @&quot;epaves&quot;;<br />		break;<br />	...<br />	}<br />	<br />etc...<br />}<br />
    


    Si je fais :
    NSMenuItem *item1= [[NSMenuItem alloc] initWithTitle:@&quot;Partenaires&quot; action:@selector(findInDive:) keyEquivalent:@&quot;&quot;];
    


    ça fonctionnera bien avec un seul item, mais qu'en est-il si j'en ai au moins deux ?
  • Eddy58Eddy58 Membre
    02:29 modifié #15
    Voici des méthodes que j'avais faites pour générer des menus, elles sont pas parfaites, il faut en outre remplacer [NSApp mainMenu] dans la méthode de création du menu par le menu que l'on veut. La méthode awakeFromNib: fait un appel à  ces méthodes, en premier on crée le menu et ensuite les autres lignes créent les items. La méthode validateMenuItem: permet de détecter la sélection dans un menu, et de gérer ainsi l'état des items. :)

    <br />-(void)awakeFromNib<br />{<br />int choixMenu=1;<br />    [self nouveauMenu_title:@&quot;Titre menu&quot;];<br />    [self nouveauMenuItem_title:@&quot;Item1&quot; action:@selector(Selection1:) key:@&quot;&quot; image:@&quot;&quot; state:((choixMenu==1) ? NSOnState : NSOffState) tag:1 target:self noImage:NO];<br />    [self nouveauMenuItem_title:@&quot;Item2&quot; action:@selector(Selection2:) key:@&quot;&quot; image:@&quot;&quot; state:((choixMenu==2) ? NSOnState : NSOffState) tag:2 target:self noImage:NO];<br />    [self nouveauMenuItem_title:@&quot;Item3&quot; action:@selector(Selection3:) key:@&quot;&quot; image:@&quot;&quot; state:((choixMenu==3) ? NSOnState : NSOffState) tag:3 target:self noImage:NO];<br />}<br /><br />-(void)nouveauMenu_title:(NSString *)ti<br />{<br />    nouveauItem=[[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:[NSString stringWithString:@&quot;&quot;] action:NULL keyEquivalent:[NSString stringWithString:@&quot;&quot;]];<br />    nouveauMenu=[[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:[NSString stringWithString:ti]];<br />    [nouveauItem setSubmenu:nouveauMenu];<br />    [nouveauMenu release];<br />    [[NSApp mainMenu] addItem:nouveauItem];<br />    [nouveauItem release];<br />}<br /><br />-(void)nouveauMenuItem_title:(NSString *)ti action:(SEL)ac key:(NSString *)ke image:(NSString *)im state:(int)st tag:(int)tag target:(id)tar noImage:(BOOL)noIm <br />{<br />    nouveauItem=[[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:[NSString stringWithString:ti] action:ac keyEquivalent:[NSString stringWithString:ke]];<br />    if (noIm==NO)<br />    {<br />        [nouveauItem setImage:[NSImage imageNamed:[NSString stringWithString:im]]];<br />    }<br />    [nouveauItem setState:st];<br />    [nouveauItem setTag:tag];<br />    [nouveauItem setTarget:tar];<br />    [nouveauMenu addItem:nouveauItem];<br />    [nouveauItem release];<br />}<br /><br />-(BOOL)validateMenuItem:(NSMenuItem *)item <br />{<br />    [item setState:(([item tag] == choixMenu) ? NSOnState : NSOffState)];<br />    return YES;<br />}<br /><br />
    
  • VeillardVeillard Membre
    02:29 modifié #16
    :o OK merci Eddy, je vais essayer de me dépatouiller avec ton code.
  • Eddy58Eddy58 Membre
    02:29 modifié #17
    J'avais bricolé ces méthodes surtout pour faire des menus avec images dans le menu d'application, si tu as des questions n'hésites pas. :)
  • VeillardVeillard Membre
    02:29 modifié #18
    J'ai pour l'instant utilisé une méthode un peu bâtarde. Je rentre le mot dans le NSSearchField et par l'item de menu, j'exécute le recherche en fonction de l'item du menu sélectionné  ???
Connectez-vous ou Inscrivez-vous pour répondre.