/ / Jak wywołać funkcję / akcję po kliknięciu elementu statusItem? - Macos, szybki

Jak wywołać funkcję / akcję po kliknięciu elementu statusItem? - Macos, szybki

Mam ten kod, który otwiera element popoverw lokalizacji "nadawcy", tj. naciśnięty przycisk. Jak mogę wywołać tę funkcję po kliknięciu elementu statusItem, aby popover pojawił się na pasku statusu / menu?

@IBAction func togglePopover(sender: AnyObject) {
if !(popoverIsOpen) {
myPopover.showRelativeToRect(sender.bounds, ofView: popoverButton, preferredEdge: NSRectEdge(3))
popoverIsOpen = true
}
else {
myPopover.close()
popoverIsOpen = false
}
}

Obecnie używam NSPopover i NSStatusItem.

edytować: Dodano dziennik zmian dla Xcode 6 beta 4 NSStatusItem.button i łagodnie przestarzała poprzednia forma takich połączeń jak NSStatusItem.action, NSStatusItem.title, NSStatusItem.targetitp.

Dokumentacja teraz czyta

NSStatusItem.button

Przycisk wyświetlany na pasku stanu. Jest to tworzone automatycznie podczas tworzenia StatusItem. Dostosowanie zachowania dla przycisku, takie jak obraz, cel / akcja, etykieta narzędzia, można ustawić za pomocą tej właściwości.

Odpowiedzi:

2 dla odpowiedzi № 1

Udało mi się osiągnąć implementację pokazaną poniżej, używając nowej wizualnej reprezentacji NSStatusBarItem NSStatusBarButton. W tym przykładzie mój plik .xib ma NSPopover element już połączony z widokiem, którego tutaj nie pokazano.

@IBOutlet weak var myPopover: NSPopover!
var statusBar: NSStatusItem!
var popoverIsOpen = false

@IBAction func togglePopover(sender: AnyObject) {
if !(popoverIsOpen) {
myPopover.showRelativeToRect(sender.bounds, ofView: statusBar.button, preferredEdge: NSRectEdge(3))
popoverIsOpen = true
}
else {
myPopover.close()
popoverIsOpen = false
}
}

func applicationDidFinishLaunching(aNotification: NSNotification?) {
//initialize menu bar icon
statusBar = NSStatusBar.systemStatusBar().statusItemWithLength(CGFloat(48))
statusBar.button.title = "Your App Title"
statusBar.button.appearsDisabled = false
statusBar.button.action = Selector("togglePopover:")
statusBar.button.target = self
}