菜单栏在左键单击时不打开

时间:2017-02-25 16:38:43

标签: swift menubar nsmenu

我有一个应用程序,在macOS的菜单栏上显示自定义视图。单击自定义视图时,我想显示上下文菜单(NSMenu)。

我的代码如下所示:

private let statusItem = NSStatusBar.system().statusItem(withLength: NSVariableStatusItemLength)
private var timer: Timer?
private var view: MenuView!
private var menu: NSMenu!
private let popover = NSPopover()
private var popoverController: PopoverViewController?

func applicationDidFinishLaunching(_ aNotification: Notification)
{
    self.view = createView()
    self.statusItem.view = self.view

    self.menu = NSMenu()
    self.menu.addItem(NSMenuItem(title: "Quit", action: nil, keyEquivalent: ""))
    self.statusItem.menu = self.menu

    self.statusItem.menu = menu
}

然而,当我点击视图时,菜单并没有像我期望的那样显示(好吧,它根本没有显示)。 当我不使用自定义视图并仅设置图像时,单击它时会打开上下文菜单。 如何在使用自定义视图时显示菜单?

1 个答案:

答案 0 :(得分:1)

如果您使用自定义视图,则您有责任处理所有事件,绘图和突出显示。

在视图的init(frame:)方法中传递NSStatusBar实例。将菜单分配给视图而不是statusItem

至少你必须覆盖mouseDown

override func mouseDown(with theEvent: NSEvent) {
    statusItem.popUpMenu(menu!)
    needsDisplay = true
}