NSMenuItem init...action???

17:56 modifié dans API AppKit #1
Hello,

J'ai un NSMenu contenant des NSMenuItem... sauf qu'ils sont grisés !?
- (id)init<br />{<br />	self = [[NSMenu alloc] initWithTitle:@&quot;AudioRatingMenu&quot;];<br />		NSMenuItem *noRateItem = [[NSMenuItem alloc] initWithTitle:@&quot;No Rate&quot; action:@selector(setNoRate:) keyEquivalent:@&quot;&quot;];<br />		NSMenuItem *oneRateItem = [[NSMenuItem alloc] initWithTitle:@&quot;&quot; action:@selector(setOneRate:) keyEquivalent:@&quot;&quot;];<br />		NSMenuItem *twoRateItem = [[NSMenuItem alloc] initWithTitle:@&quot;&quot; action:@selector(setTwoRate:) keyEquivalent:@&quot;&quot;];<br />		NSMenuItem *threeRateItem = [[NSMenuItem alloc] initWithTitle:@&quot;&quot; action:@selector(setThreeRate:) keyEquivalent:@&quot;&quot;];<br />		NSMenuItem *fourRateItem = [[NSMenuItem alloc] initWithTitle:@&quot;&quot; action:@selector(setFourRate:) keyEquivalent:@&quot;&quot;];<br />		NSMenuItem *fiveRateItem = [[NSMenuItem alloc] initWithTitle:@&quot;&quot; action:@selector(setFiveRate:) keyEquivalent:@&quot;&quot;];<br />		[oneRateItem setImage:[NSImage imageNamed:@&quot;OneStar&quot;]];<br />		[twoRateItem setImage:[NSImage imageNamed:@&quot;TwoStar&quot;]];<br />		[threeRateItem setImage:[NSImage imageNamed:@&quot;ThreeStar&quot;]];<br />		[fourRateItem setImage:[NSImage imageNamed:@&quot;FourStar&quot;]];<br />		[fiveRateItem setImage:[NSImage imageNamed:@&quot;FiveStar&quot;]];<br />		[self addItem:noRateItem];<br />		[noRateItem release];<br />		[self addItem:oneRateItem];<br />		[oneRateItem release];<br />		[self addItem:twoRateItem];<br />		[twoRateItem release];<br />		[self addItem:threeRateItem];<br />		[threeRateItem release];<br />		[self addItem:fourRateItem];<br />		[fourRateItem release];<br />		[self addItem:fiveRateItem];<br />		[fiveRateItem release];<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; return self;<br /><br />}<br /><br />- (void)setNoRate:(NSMenuItem *)sel<br />{<br />	NSLog(@&quot;tamere&quot;);<br />}


quéqué? le noRate ne devrait pas être grisé pourtant il l'est

Réponses

  • WIMPWIMP Membre
    17:56 modifié #2
    Si le menuItem n'est pas connecté à  l'action dans IB, c'est normal qu'il reste grisé.
    Par ailleurs, pourquoi définir les titres des menus par programme ? C'est bien plus simple de passer par IB
  • fouffouf Membre
    17:56 modifié #3
    Tu peux aussi implémenter validateMenuItem: qui va te servir à  retourner si oui ou non l'item doit etre activé.
  • 17:56 modifié #4
    Tu peux jouer sur - (void)setEnabled:(BOOL)flag pour NSMenuItem
    Et - (void)setAutoenablesItems:(BOOL)flag pour NSMenu (les items seront desactivés s'ils n'ont pas d'action/selector.

    N'oublie pas setTarget: pour bien préciser la cible de l'action/selector

    Je te conseil de faire une fonction que crée les menuItems pour limiter le code en double. Genre newMenuItemWithTitle: target: selector: image: tag: menu:
  • 17:56 modifié #5
    C'était effectivement le setTarget:self que j'avais zappé

    Eaglelouk vous dit merci :p
  • août 2005 modifié #6
    Bon voilà  jvous donne une infos bien sympa.
    Ds mon menu je voulais les étoiles à  la iTunes (donc passé par Photoshop etc... etc.. en plus pas pratique pour remplir un NSMenu à  cause du "setImage" pour chaque NSMenuItem). Maintenant que c'est fait je suis fasse à  un autre problème, celui de la selection d'une row de mon tableau (ça devient bleu bien sûr) et ducoup mes étoiles grises ne sont plus visibles enfin quasiment plus...
    Bon ben alors on rajoute des étoiles blanches et on utilise une notif pour... nan !
    Alors Mister Renaud (le copain du renard) m'a filé une astuce très sympatoche :
    à  l'initalization d'un NSMenuItem on lui donne un titre : @** (pour 2 étoiles") mais en localized donc comme ceci : NSLocalizedString(@**, nil)
    Ds notre localizable.strings on met : "**" = "??"; // Etoiles implémentées avec la palette des caractères spéciaux (remplacées par des ?? avec Safari..)

    C'est-y pas beau et intelligent?
  • 17:56 modifié #7
    Ou :
    NSString *stella=[NSString stringWithFormat:@%C %C %C, 9733,9733,9733];
    NSLog(stella);
Connectez-vous ou Inscrivez-vous pour répondre.