/ / Ako môžem vyvolať funkciu / akciu po kliknutí na statusItem? - maky, rýchle

Ako môžem zavolať funkciu / akciu pri kliknutí na statusItem? - maky, rýchle

Mám tento kód, ktorý otvára prvok popoverv mieste odosielateľa, t. j. tlačidla, ktoré bolo stlačené. Ako môžem vyvolať túto funkciu, keď sa klikne na statusItem, aby popover zostúpil z lišty stavu / ponuky?

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

Momentálne používam NSPopover a NSStatusItem.

edit: Bol pridaný zoznam zmien pre Xcode 6 beta 4 NSStatusItem.button a jemne zastaral predchádzajúcu formu hovorov ako NSStatusItem.action, NSStatusItem.title, NSStatusItem.target, atď.

Dokumentácia teraz číta

NSStatusItem.button

Tlačidlo zobrazené v stavovom riadku. Toto sa vytvorí automaticky pri vytvorení StatusItem. Pomocou tejto vlastnosti možno nastaviť prispôsobenie správania sa tlačidla, napríklad obrázok, cieľ / akcia, popis.

odpovede:

2 pre odpoveď č. 1

Podarilo sa mi dosiahnuť implementáciu uvedenú nižšie, pomocou novej vizuálnej reprezentácie NSStatusBarIttu NSStatusBarItem. V tomto príklade má môj súbor .xib NSPopover prvok je už pripojený k pohľadu, ktorý tu nie je zobrazený.

@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
}