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.target
itp.
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 № 1Udał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
}