显示带有视图的NSStatusItem菜单

时间:2016-06-09 09:02:00

标签: click nsmenu nsstatusitem

我有一个带有自定义视图(TimeView)的NSStatusItem,但这会阻止点击显示与NSStatusItem关联的NSMenu。如果我禁用NSStatusItem的视图,那么菜单会正确显示,但是,如果我启用它,那么当我点击视图时没有任何反应。

class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var statusMenu: NSMenu!

    let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(NSVariableStatusItemLength)


    func applicationDidFinishLaunching(aNotification: NSNotification) {
        statusItem.view = TimeView(statusItem: statusItem)//Commenting out this line provides the correct functionality for displaying the menu
        statusItem.menu = statusMenu
    }

    func applicationWillTerminate(aNotification: NSNotification) {
        // Insert code here to tear down your application
    }    

}

非常感谢,Ben

1 个答案:

答案 0 :(得分:0)

所以我找到了实现这个目标的方法。您可以使用NSStatusItem的{​​{1}}方法在观看popUpStatusItemMenu(menu: NSMenu)方法中显示菜单。

但是,这并不会突出显示NSStatusItem。我能找到的最简单的方法是使视图符合mouseDown(event: NSEvent)并将其设置为菜单委托。然后,您可以按以下方式覆盖NSMenuDelegatemenuWillOpen(menu: NSMenu)方法:

menuDidClose(menu: NSMenu)