当点击状态栏项时,我该如何调用一个函数或动作?

3

我有这样一段代码,它可以在“发送者”位置打开一个弹出式元素,也就是被按下的按钮。当状态栏/菜单栏中的项目被点击时,我该如何使此函数调用,以便从状态栏/菜单栏中滑下弹出式窗口?

@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.titleNSStatusItem.target等。
现在的文档说明如下:

NSStatusItem.button

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

1个回答

6

我能够使用新的NSStatusBarButton视觉表示法,实现如下所示的功能,与NSStatusBarItem相关。在这个例子中,我的.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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接