2017-05-16 6 views
1

Zuerst erkläre ich den Status Artikel:NSStatusItem in NSStatusBar, action-Auswahlverfahren nicht reagiert

var status_item: NSStatusItem? 

Dann habe ich eine Funktion, die Witwe zu schließen und den Statuseintrag hinzufügen:

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:)) 
} 

Hier ist mein Aktionsselektormethode, die das Statuselement entfernen und das Fenster erneut anzeigen soll. Tho es heißt nicht zu werden, wenn die Statusleiste Element in der Statusleiste drücken:

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

Dose jemand wissen, was mache ich falsch?

Antwort

1

Setzen Sie das Ziel der Schaltfläche auf self. Ich gehe davon aus, dass Sie Code aus dem AppDelegate in eine separate Klasse verschoben haben. Wenn dies der Fall ist, empfängt die Schaltfläche weiterhin Nachrichten von AppDelegate.

So ...

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 
}