2016-06-21 1 views
1

Je suis en mesure de créer par programme des éléments de menu en utilisant le code suivant.NSMenuItem mise à jour titre

primaryMenu.addItem(NSMenuItem(title: "MenuTitle", action: nil, keyEquivalent: ""))

Je veux être en mesure de mettre à jour le titre de cet élément de menu. J'ai été capable de le faire très facilement lorsque je crée manuellement le menu en utilisant Interface Building.

Je n'ai aucun moyen d'identifier l'élément de menu.

Répondre

1

magasin une référence à votre NSMenuItem (comme dans une variable d'instance), et définir le titre là-dessus chaque fois que vous souhaitez:

let myMenu = NSMenuItem(title: "MenuTitle", action: nil, keyEquivalent: "") 

primaryMenu.addItem(myMenu) 

//somewhere else: 
myMenu.title = "xyz" 
+0

Cependant * ailleurs * doit être dans la même portée ce qui n'a pas beaucoup de sens. – vadian

+0

Clarification ajoutée – Alexander

1

Il suffit de créer une variable instanciée paresseuse au niveau supérieur de la classe

lazy var mySpecialMenuItem : NSMenuItem = { 
    return NSMenuItem(title: "MenuTitle", action: nil, keyEquivalent: "") 
}() 

et affecter l'élément de menu à la variable

primaryMenu.addItem(mySpecialMenuItem) 

Maintenant, vous pouvez modifier le titre

mySpecialMenuItem.title = "Something Else" 

L'avantage d'une variable instanciée est paresseux, il ne sera pas initialisé jusqu'à ce qu'il soit accessible pour la première fois et vous pouvez éviter une option ou implicite non emballé en option.