Désactiver des items de menu

muqaddarmuqaddar Administrateur
19:53 modifié dans API AppKit #1
Soit 10 menus popup constitués de 15 items chacun environ.
Soit 4 ou 5 items devant être désactivés dans chaque menu, ici, tous ceux dont le tag==0.

Soit cette fonction :

[tt]- (BOOL)validateMenuItem:(NSMenuItem*)anItem {
if ([anItem tag]==0) {
return NO;
}
return YES;
}[/tt]

Cela ne marche pas, je suppose que c'est parce que les menus sont construits dans IB... et non par le code.

Comment procéder , notamment si je dois passer par le code (ce qui est p-e dommage)... Y a t-il un moyen de recharger un menu de IB dans une fonction ?  :o

Réponses

  • Eddy58Eddy58 Membre
    19:53 modifié #2
    Peut-être faut-il désactiver la validation automatique des menus dans l'initialisation : :o
    [tt]
         [monMenu setAutoenablesItems:NO];
    [/tt]
  • ChachaChacha Membre
    19:53 modifié #3

    Cela ne marche pas

    C'est bizarre que ça ne marche pas... Ta fonction est-elle vraiment appelée ? Si tu mets des NSLog("toto") dans et hors du if, ça donne quoi ? N'y a-t-il pas une faute de frappe dans ton code non reproduite dans l'exemple minimal que tu donnes ? Les tags sont-ils vraiment à  0 ?
    Bref, pour l'instant, je ne vois pas de raisons pour lesquelles ça échouerait.

    +
    Chacha
  • muqaddarmuqaddar Administrateur
    19:53 modifié #4
    Apparemment, cette fonction n'est pas appelée. Est-ce normal puisque les menus sont construits ds IB ?
    Peut-on forcer l'appel ?

    @Eddy : je ne passe pas par le code pour construire...
  • Eddy58Eddy58 Membre
    19:53 modifié #5
    D'après la doc, l'objet qui implémente la méthode validateMenuItem doit être la target du menuItem. Est-ce le cas ? ???
  • ChachaChacha Membre
    juin 2005 modifié #6
    dans 1119880754:

    Apparemment, cette fonction n'est pas appelée. Est-ce normal puisque les menus sont construits ds IB ?


    Je viens de regarder en vitesse, chez moi ça marche parfaitement : j'ai un NSPopupButton dont l'action est connectée à  une IBAction quelconque d'un objet quelconque. Dans cet objet, j'ai aussi mis un validateMenuItem qui est bien appelé automatiquement.
    t'aurais pas fait une faute de frappe dans le prototype de
    -(BOOL) validateMenuItem:(id)sender
    ?

    +
    Chacha


    [edit]
    Ah, oui, si tu l'as fait, enlève donc  le :
    [monMenu setAutoenablesItems:NO];
    il doit être activé (et il l'est par défaut)
    [/edit]
  • muqaddarmuqaddar Administrateur
    19:53 modifié #7
    A vrai dire, je vois pas quel est le target de mon menuItem... C'est juste une selection et je n'ai pas d'action liée !
  • ChachaChacha Membre
    juin 2005 modifié #8
    dans 1119882487:

    A vrai dire, je vois pas quel est le target de mon menuItem... C'est juste une selection et je n'ai pas d'action liée !

    Ah ben c'est pour ça. Apparemment, pour que le validateMenuItem soit appelé automatiquement, il faut que l'action du menu soit associée à  un objet. Dans ton cas, ça ne coûte pas cher, tu n'as qu'à  rajouter un
    <br />-(IBAction) popupClicked:(id)sender<br />{<br />  //nothing to be done, but it allows validateMenuItem to be called<br />}<br />
    

    à  l'objet dans lequel tu fais le validateMenuItem, et y relier tes popups. Là , ça devrait fonctionner.

    +
    Chacha

    [edit]
    Rendons à  César...

    D'après la doc, l'objet qui implémente la méthode validateMenuItem doit être la target du menuItem. Est-ce le cas ?

    Eddy, premier sur la détection de bugs
    [/edit]
  • muqaddarmuqaddar Administrateur
    19:53 modifié #9
    Super !

    Merci à  vous deux !
    ça marche nikel chrome avec le target et la petite astuce de chacha...  <3 :adios!:<br />
    Une petite capture pour vous remercier :


    [Fichier joint supprimé par l'administrateur]
  • ChachaChacha Membre
    19:53 modifié #10
    dans 1119885395:

    Une petite capture pour vous remercier :

    Fallait s'en douter : menu-action et validateMenuItem... cellier !
    Bon, je sors.
Connectez-vous ou Inscrivez-vous pour répondre.