J'essaie de changer les titres de certains des éléments du menu principal de mon Cacao de l'application Cocoa. J'ai essayé de les définir à la fois dans IB et aussi de manière programmatique de l'application de mon applicationDinishlaunchwithOptions: méthode. De toute façon, la propriété de titre de mon objet Nsmenuitem change. Mais aucune de mes modifications ne se reflète dans le titre actuel de l'élément en haut de l'écran lorsque l'application est en cours d'exécution.
Quelqu'un peut-il expliquer ce qui se passe? Et comment puis-je modifier ceci? P>
Edit: La structure de données est la par défaut que IB définit: p> J'ai changé les propriétés du titre de les deux firstItem et le sous-menu doivent être mon titre souhaité. Pourtant, l'on affiche par défaut. P> p>
4 Réponses :
Renommer le projet l'a fait. Semble trop extrême, cependant. Je serais toujours intéressé par une solution moins extrême. P>
Lorsque vous dites "Renommer", voulez-vous dire que vous venez de modifier son nom de nom de fichier et que cela résolvait-le, ou avez-vous recréé le projet "de nettoyer" sous un nouveau nom?
Dans Xcode, menu du projet> Renommer. Cela change de tas de choses. . . Je n'ai enquêté sur lequel d'entre eux a fait l'affaire.
Ok, merci - pourrait être utile pour quelqu'un d'autre qui tourne dans le même problème.
Si vous êtes toujours intéressé par une solution moins extrême, vous devez accepter la réponse de @ Askh?
au lieu de renommer le changement de projet "nom de référence" dans votre application-info.plist à partir de $ {produit_name}; à ce que vous voulez; Ce changement sera reflété dans le titre de l'élément de menu principal du menu principal. p>
Parfois, cela ne fonctionne pas, car le cacao n'aime pas votre titre :-p qui arrive selon E.G. Lorsque le titre que vous avez choisi est le nom de l'application localisé, mais il souhaite afficher le nom de l'application non localisé. Un petit tour peut aider ... Ouais, c'est fou, mais ce personnage supplémentaire à la fin a fait toute la différence. (Vous pouvez également appendez-vous simplement un espace, mais l'élément de menu augmente probablement pas ce que vous voulez.) P> testé sur OS X 10.9.5. P> Une autre chose: strong> p> Vous devez faire tout cela après avoir montré une fenêtre. Sinon, cela ne fonctionne tout simplement pas. De plus, si vous effectuez cette procédure au démarrage de l'application, puis plus tard, lorsque la fenêtre est affichée, faites-la encore, cela peut ne pas fonctionner aussi. P> P>
J'ai fait ceci dans - (vide) ApplicationDidDfinishLaunching: (NOTIFICATION *) ANOTITIFICATION ET CELA A FONCTIONNÉE Bien.
Cela fonctionne, mais le titre n'est plus en caractères gras?
@BasDP: Est-ce une question? Ou avez-vous un problème que le titre n'est plus en gras de police? Partout où je l'ai testé, le titre est resté en gras.
Oui, je ressens la même chose. Le premier titre du menu (nom ex) dans la barre de menu change, mais pas en gras. J'ai essayé de définir la police, aucun résultat. Le code est: laissez les articles = nsapplication.shared.mainmenu?
Mieux vaut tard que jamais: après avoir creusé une solution de travail, même deux!
Vous pouvez définir une image de menu avec un texte rendu (vous pouvez utiliser des polices audacieuses!) P>
// dynamically load ApplicationServices.GetCurrentProcess typealias GetCurrentProcessType = @convention(c) (UnsafePointer<ProcessSerialNumber>) -> OSStatus let getCurrentProcessSym = dlsym(UnsafeMutableRawPointer(bitPattern: -2), "GetCurrentProcess")! let getCurrentProcess = unsafeBitCast(getCurrentProcessSym, to: GetCurrentProcessType.self) // dynamically load ApplicationServices.CPSSetProcessName typealias CPSSetProcessNameType = @convention(c) (UnsafePointer<ProcessSerialNumber>, UnsafePointer<Int8>) -> OSStatus let cpsSetProcessNameSym = dlsym(UnsafeMutableRawPointer(bitPattern: -2), "CPSSetProcessName")! let cpsSetProcessName = unsafeBitCast(cpsSetProcessNameSym, to: CPSSetProcessNameType.self) // Get current process serial number var psn = ProcessSerialNumber() getCurrentProcess(&psn) // Change Process Name "Custom Title".withCString { cpsSetProcessName(&psn, $0) }
Sont-ils autonomes
nsmenuitem code> ou sont-ils
nsmenu code> des instances?
nsmenu code> garde son propre titre.
Le menu principal d'une application affichée dans la barre de menus en haut de l'écran est un nsmenu; Mais chacune de ses entrées visibles - par ex. "Nom de l'application", "fichier", "modifier", "vue", etc. - est un nsmenuitem. Chaque élément de menu contient un nsmenu qui est le sous-menu que vous voyez de tomber en panne. C'est donc un nsmenu, mais c'est un "spécial" qui affiche horizontalement dans la barre de menus plutôt que verticalement. Maintenant, je vous attendrais à ce que vous puissiez doubler de cliquer sur les éléments de la barre de menu simulée affichée lorsque vous chargez la nibrage dans l'interface Builder et définissez le texte directement là-bas. Cela ne fonctionne-t-il pas pour vous?
Andrew - Je peux changer le texte, mais cela montre toujours la même chose dans l'application.
Quelqu'un de CodeWeavers a dit qu'ils utilisaient un "hiraille laid" pour le faire, où ils changent le nom de l'apps d'applications avant que APPKIT ne veuille le voir. Je n'ai pas de détails.