使用视图显示 NSStatusItem 的菜单
Show menu for NSStatusItem with view
我有一个设置了自定义视图 (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
}
}
非常感谢,本
所以我找到了实现此目的的方法。您可以使用 NSStatusItem
的 popUpStatusItemMenu(menu: NSMenu)
方法在视图 mouseDown(event: NSEvent)
方法中显示菜单。
然而,这不会突出显示 NSStatusItem。我能找到的最简单的方法是使视图符合 NSMenuDelegate
并将其设置为菜单委托。然后你可以通过以下方式覆盖 menuWillOpen(menu: NSMenu)
和 menuDidClose(menu: NSMenu)
方法:
func menuWillOpen(menu: NSMenu) {
drawHighlight(true)
}
func menuDidClose(menu: NSMenu) {
drawHighlight(false)
}
func drawHighlight(highlight:Bool) {
let image = NSImage(size: self.frame.size)
image.lockFocus()
statusItem.drawStatusBarBackgroundInRect(self.bounds, withHighlight: highlight)
image.unlockFocus()
self.layer?.contents = image
}
我有一个设置了自定义视图 (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
}
}
非常感谢,本
所以我找到了实现此目的的方法。您可以使用 NSStatusItem
的 popUpStatusItemMenu(menu: NSMenu)
方法在视图 mouseDown(event: NSEvent)
方法中显示菜单。
然而,这不会突出显示 NSStatusItem。我能找到的最简单的方法是使视图符合 NSMenuDelegate
并将其设置为菜单委托。然后你可以通过以下方式覆盖 menuWillOpen(menu: NSMenu)
和 menuDidClose(menu: NSMenu)
方法:
func menuWillOpen(menu: NSMenu) {
drawHighlight(true)
}
func menuDidClose(menu: NSMenu) {
drawHighlight(false)
}
func drawHighlight(highlight:Bool) {
let image = NSImage(size: self.frame.size)
image.lockFocus()
statusItem.drawStatusBarBackgroundInRect(self.bounds, withHighlight: highlight)
image.unlockFocus()
self.layer?.contents = image
}