实现自定义绘制的NSMenuItem视图的简单方法

时间:2017-02-01 12:21:12

标签: macos cocoa nsmenu nsmenuitem nspopupbutton

我希望NSMenu中包含多个NSMenuItem s。这些项目应该像“普通”NSMenuItem一样,但有一个例外:我希望能够自己绘制每个项目的内容(即“前景”)

那是:

  • 我希望操作系统在我用鼠标悬停时绘制蓝色突出显示,勾选复选标记或破折号(表示“选中”/“多项选择的一部分” )。此外,我想“正常”,即菜单内置的鼠标/键盘行为。

  • 我想绘制“内容”我自己:理想情况下,我想我必须实现/覆盖一个方法drawMenuItem:withCGContext:inRectangle:withTextColor,它基本上获得了item,要绘制的CGContext,项目的NSRect以及Mac OS将使用的文本颜色 如果它自己绘制项目。

我知道(怀疑非常强烈)我的愿望可能太多了,但是我会完全没有足够的东西(例如,我可以想象自己从NSRect取出NSMenuItem,获得使用[NSColor selectedMenuItemTextColor]之类的颜色和使用[NSContext currentContext])之类的上下文。

当然我考虑过Apple's instruction on this。但是,这样做会阻止菜单绘制蓝色高亮背景和复选标记。而且,据我所知,我必须实施,例如mouseUp我自己。

总结一下:有没有办法获得一个(几乎)功能齐全的菜单,我只会自定义菜单项目标题的内容(甚至可能没有自定义视图)?

1 个答案:

答案 0 :(得分:2)

答案是:否。

由于您要更换菜单项的整个视图,您负责绘图并处理事件。