2012-03-24 4 views
0

Je reçois un NSMenuItem du Main Menu, avec le code ici: Getting NSMenuItem of NSMenu tree by titletitre de réglage sur NSMenuItem, sans effet

Cependant, quelque chose d'étrange se produit:

  • Une NSMenuItem liée à une action: Quand en utilisant la propriété de l'expéditeur (NSMenuItem) et en définissant le titre, cela fonctionne.
  • MAIS: Lors de l'obtention du point avec la fonction ci-dessus et définir le titre, le titre de NSMenuItem ne change, mais le changement n'est pas reflétée dans le menu il appartient.

Qu'est-ce que je fais mal? (Je suis sûr que celui-ci est vraiment stupide ...)

NSMenuItem* mi = [[core mainMenu] getItemWithPath:@"View" tag:PP_MENU_TAG_STATUSBAR]; 
[mi setTitle:@"newTitle"]; 
NSLog(@"mi : %@",[mi title]); 

// mi changes, but no changes take effect in the mainMenu 

Répondre

1

J'oublierait la Obtenir NSMenuItem d'arbre NSMenu par code titre et il suffit de connecter chaque menu IB.

Utilisez ensuite la setTitle sur elle en cas de besoin

MISE A JOUR *

(voir commentaires) Il m'a fallu un certain temps pour comprendre pourquoi même mon test un ne fonctionnait pas !!. J'avais mis un titre attribué dans IB.

enter image description here

Alors, quand je plus tard setTitle. La propriété était en cours de définition, mais le menu affiché a été remplacé par le titre attribué.

Suppression du titre attribué de IB. fixé ceci. Et setTitle fonctionne comme prévu.

Aussi je n'ai jamais utilisé le titre attribué avant. Et je viens de coller dans un texte coloré formaté dans le titre attribué IB. Et l'élément de menu était le même en couleur et en police.

Ce que j'ai toujours voulu être capable de faire mais pensé n'était pas possible.

Et le faire par programme est facile.

NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@"newTestMenu"]; 
    [string addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:NSMakeRange(0,string.length)]; 

    [_testMenu setAttributedTitle:string]; 
+0

Cela fonctionne (je suppose); mais, qu'en est-il de ce qui précède? Qu'est-ce que je fais mal? –

+0

quel est le tag: PP_MENU_TAG_STATUSBAR] part ?. Vous n'avez pas cela dans le nom de la méthode! – markhunte

+0

Eh bien, ok ... je l'admets - pour un sous-sous-dossier particulier, j'ai dû déclarer un Tag pour l'un des éléments de menu ... donc j'ai créé une fonction appropriée ('getItemWithPath: tag:' - à peu près le identique à l'autre) + définir 'PP_MENU_TAG_STATUSBAR' (= 1)). Pffff ... Ça devient vraiment trop complexe ... J'ai commencé à penser que je devrais faire comme tu veux ... –