Enlever/remettre un item de menu
tablier
Membre
J'ai un bouton popup à quatre items de menu. Je veux enlever ou remettre le dernier item du menu.
Quand je le remets, j'ai trouvé que je devais utiliser setTarget: puis setAction:
D'autre part, dans l'exemple d'Apple (prefsPane) la_methode est bien présente dans le .m sous la forme:
Quand je le remets, j'ai trouvé que je devais utiliser setTarget: puis setAction:
Cela marche bien. Mais y-a-t-il des précautions à prendre quand je supprime le menuItem ?[leMenuItem setTarget:lobject_qui_contient_la_methode] ;
[leMenuItem setAction:@selector(la_methode] ;
D'autre part, dans l'exemple d'Apple (prefsPane) la_methode est bien présente dans le .m sous la forme:
Mais cette méthode n'est pas déclarée dans le .h, est-ce bien normal ?- (IBAction)la_methode:(id)sender
{ . . . . . le texte de la méthode . . . . }
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Mis à part supprimer l'item.. non.
Mais ta méthode "d'ajout" me semble bizarre.. Tu es sûr d'avoir supprimé l'item en question via -removeItem: (NSMenu)?
Sinon tu peux "désactiver" l'item en mettant son action à NULL.
Oui,.. et non. En tout logique on devrait la déclarer dans le .h, ou bien dans un @interface private dans l'implémentation... c'est ce qu'on pourrait appeler une précaution. Si jamais tu vires la méthode par erreur, tu n'auras pas de warning à la compilation car tu n'appelles pas explicitement la-dite méthode. Ceci-dit, si tu testes ton application tu remarqueras un plantage.
??? C'est étonnant qu'Apple n'ait pas pris de précaution au niveau de la déclaration!!
Si je comprends bien ce que tu dis: si une méthode n'est pas appelée directement on peut ne pas la déclarer dans un .h, mais le compilateur connait quand même son sélecteur. Donc, bien que non déclarée on peut quand même l'appeler!
Là tu as simplement un warning, mais rien qui empêche le fonctionnement. La méthode est correctement appelée
Place - (void)doSomething avant -(void)awakeFromNib, et le warning disparaà®t, car le compilo aura pris en compte son existence avant la ligne où tu l'appelles.
La raison pour laquelle tu n'as pas de warning à setAction: c'est simplement parce que la méthode n'est pas appelée à ce moment là , et que tu ne l'appelles nul part explicitement.
Bien sûr, si le compilo était un peu plus intelligent, il te l'aurait signalé.. mais bon peut-être qu'on en demande trop