2017-02-01 116 views
0

我想有一个NSMenu其中有几个NSMenuItem s。这些项目的行为应与“正常”NSMenuItem一样,但有一个例外:我希望能够自行绘制每个项目的内容(即“前景”)。实现自定义绘制的NSMenuItem视图的简单方法

即:

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

  • 我想提请了“内容” 自己:理想情况下,我会想象我将不得不实行/覆盖一个单一的方法drawMenuItem:withCGContext:inRectangle:withTextColor,基本上获得该项目时,CGContext绘制成的NSRect以及文本颜色,如果Mac OS引用该项目本身,则会使用该文本颜色。

我知道(怀疑很stronlgy),我的愿望是可能太多了,但我会用一些适当的(例如,我可以想像取出由NSMenuItemNSRect自己,获得使用类似的颜色完全正常[NSColor selectedMenuItemTextColor],以及使用诸如[NSContext currentContext]之类的上下文)。

当然我认为是Apple's instruction on this。但是,这样做可以防止菜单绘制蓝色高光背景和复选标记。而且,据我所知,我必须实施mouseUp我自己。总结:有没有一种方法可以获得(几乎)功能齐全的菜单,其中我只能自定义菜单项标题所在的内容(可能甚至没有自定义视图)?

+0

您不能设置菜单项的图像吗? – Willeke

+0

@Willeke我想到了这一点,但有点犹豫,因为我现在知道这是否是最初的形象。此外,我不确定是否可以直接根据“NSMenuItem”的“高亮”状态动态改变前景色。 – phimuemue

回答

2

答案是:

由于要更换你负责绘制和处理事件的菜单项的整个视图号。

+0

你的答案可能是真的。但是,难道不是我可能不需要首先使用自定义视图?我希望有一些技术,可能没有自定义的观点,以实现我所追求的目标。 – phimuemue

+0

不幸的是'NSMenuItem'继承自'NSObject',所以没有(公共)视图相关的API来覆盖。 – vadian

+0

的确如此,我在视图层次结构调试器中观察到,带普通香草项目的“NSMenu”不包含每个项目的子视图,而似乎是在整个菜单的“NSView”中绘制所有内容。所以我想:“也许我可以继承这个...” – phimuemue