2017-08-01 2 views
0

J'ai créé une application de barre de menu et je voudrais que lorsque vous cliquez sur l'un des éléments de la barre de menu, elle permute entre l'état désactivé et l'état activé (coché et décoché) fais ceci dans le code. Quelqu'un at-il des idées sur la façon dont cela peut être réalisé?Définir l'état de NSMenuItem sur On

Je peux voir que je peux le définir dans l'inspecteur d'attributs mais je voudrais le changer en On/Off une fois qu'il a été pressé.

Merci Miles

Répondre

0

solution simple: Créer un IBAction

@IBAction func toggleState(_ sender: NSMenuItem) { 
    sender.state = sender.state == NSOnState ? NSOffState : NSOnState 
} 

Connectez le NSMenuItem au IBAction. Si le contrôleur répondant n'est pas lié à la Application Scene, connectez le IBAction via First Responder (cube rouge)

+0

Exactement ce que je cherchais incroyable, merci! Je suppose que lorsque chaque état est basculé je peux appeler une fonction différente à l'action sur chaque état à bascule? –

+0

Vous pouvez appeler la * fonction différente * juste après la ligne pour définir l'état. En fait, la réponse de Charles est bien meilleure si l'élément de menu est directement lié à la scène/au contrôleur - donc la valeur peut être liée. Dans ce cas, ajoutez l'observateur 'didSet' et appelez votre * fonction différente * ici. – vadian

0

Simplest et la plus simple de le faire avec presque pas de code:

  1. Créer une propriété booléenne sur votre délégué application (il peut être sur un autre objet si c'est plus approprié), et le marquer avec '@objc' et 'dynamique' comme ceci:

@objc dynamic var foo: Bool = false

  1. Dans Interface Builder, cliquez sur votre élément de menu et accédez à l'inspecteur Liaisons. Liez la 'valeur' ​​à l'application Délégué, laissez la clé du contrôleur vide et définissez le chemin de la clé du modèle au nom de la propriété (dans ce cas, 'foo').

  2. Il n'y a pas d'étape trois.