2017-02-25 108 views
0

我有一个应用程序在macOS的菜单栏上显示一个自定义视图。当点击自定义视图时,我想显示一个上下文菜单(NSMenu)。菜单栏左键点击额外没有打开

我的代码如下所示:

私人让statusItem = NSStatusBar.system()statusItem(withLength:NSVariableStatusItemLength) 私人VAR计时器:计时器? private var view:MenuView! 私有var菜单:NSMenu! private let popover = NSPopover() private var popoverController:PopoverViewController?但是,当我点击视图时,菜单并不像我所期望的那样显示(当然,它根本不显示)。 当我不使用我的自定义视图并仅设置图像时,单击它时会打开上下文菜单。 如何在使用自定义视图时显示菜单?

问候, 萨沙

回答

1

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

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

至少你必须覆盖mouseDown

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

感谢您的提示,我有一个稍微不同的方式去了。我仍然将菜单分配给状态项目。点击视图后,会发送通知,然后在AppDelegate中处理。这里调用popUpMenu函数。谢谢。 –

+1

由于实例可以从任何地方直接访问('NSApp.delegate'),因此不鼓励将通知发送到'Appdelegate'。仅在有多个接收者或视图/控制器不相互关联时才使用通知。此外,我会建议在**视图中始终保持关于视图的逻辑**。 – vadian

+0

好吧,我会改变它,然后再次感谢你。不知道NSApp.delegate访问。 –