2017-05-16 3 views
1

D'abord, je déclare l'élément d'état:NSStatusItem dans NSStatusBar, la méthode de sélection d'action ne répond pas

var status_item: NSStatusItem? 

, j'ai une fonction pour fermer la veuve et ajouter l'élément d'état:

self.view.window?.orderOut(self) 
//self.view.window?.close() 

self.status_item = NSStatusBar.system().statusItem(withLength: NSSquareStatusItemLength) 
if let status_button = self.status_item?.button { 
    status_button.image = NSImage(named: "StatusBarButtonImage") 
    status_button.action = #selector(statusBar(sender:)) 
} 

Voici mon méthode sélecteur d'action, qui devrait supprimer l'élément d'état et afficher à nouveau la fenêtre. Tho c'est pas appelé lorsque vous appuyez sur l'élément de la barre d'état dans la barre d'état:

func statusBar(sender: AnyObject) { 
    print("status bar clicked") 
    self.status_item = nil 
    self.view.window?.orderFront(nil) 
} 

dose quelqu'un sait ce que je fais mal?

Répondre

1

Définissez la cible du bouton sur Self. Je suppose que vous avez déplacé le code de AppDelegate vers une classe distincte. Si c'est le cas, le bouton reçoit des messages de AppDelegate encore.

Alors ...

if let status_button = self.status_item?.button { 
    status_button.image = NSImage(named: "StatusBarButtonImage") 
    status_button.action = #selector(statusBar(sender:)) 
    status_button.target = self //critical line 
}