【发布时间】:2017-02-01 12:21:12
【问题描述】:
我想要一个NSMenu,里面有几个NSMenuItems。这些项目的行为与“正常”NSMenuItems 一样,但有一个例外:我希望能够自己绘制每个项目的内容(即“前景”)。
即:
我希望操作系统在我用鼠标悬停时绘制蓝色突出显示,绘制复选标记或破折号(表示“选中”/“多选的一部分” )。此外,我想要“正常”,即菜单内置鼠标/键盘行为。
我想画“内容”我自己:理想情况下,我想我必须实现/覆盖一个方法
drawMenuItem:withCGContext:inRectangle:withTextColor,它基本上获得了项目,要绘制的CGContext、项目的NSRect,以及Mac OS 将使用的文本颜色如果它自己绘制项目。
我知道(怀疑非常强烈)我的愿望可能太多了,但如果有足够的东西我会完全没问题的(例如,我可以想象自己从NSMenuItem 获取NSRect,使用类似的东西获取颜色[NSColor selectedMenuItemTextColor],以及使用 [NSContext currentContext] 之类的上下文。
我当然考虑过Apple's instruction on this。但是,这样做会阻止菜单绘制蓝色突出显示背景和复选标记。此外,据我所知,我将不得不实施例如mouseUp我自己。
总结一下:有没有办法获得(几乎)功能齐全的菜单,我只自定义通常菜单项标题所在的内容(甚至可能没有自定义视图)?
【问题讨论】:
-
不能设置菜单项的图片吗?
-
@Willeke 我想过这个,但有点犹豫,因为我现在知道这是否是最初构思图像的目的。此外,我不确定是否可以直接根据
NSMenuItem的“突出显示”状态动态更改前景色。
标签: macos cocoa nsmenu nsmenuitem nspopupbutton