单击statusItem时如何调用函数/动作?

时间:2014-07-25 21:41:24

标签: macos swift

我有这个代码在“发件人”位置打开一个弹出元素,即按下的按钮。如何在单击statusItem时调用此函数,以便弹出窗口从状态/菜单栏中下载?

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

我目前正在使用NSPopoverNSStatusItem

修改:Xcode 6 beta 4的更改日志添加了NSStatusItem.button,并轻柔地弃用了以前的调用形式,例如NSStatusItem.actionNSStatusItem.title,{{1}等等。

文档现在读取

  

NSStatusItem.target

     
    

状态栏中显示的按钮。这是在创建StatusItem时自动创建的。可以使用此属性设置按钮的行为自定义,例如图像,目标/操作,工具提示。

  

1 个答案:

答案 0 :(得分:2)

我能够使用NSStatusBarItem的新NSStatusBarButton可视化表示来实现下面显示的实现。在此示例中,我的.xib文件已将NSPopover元素连接到视图,此处未显示。

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