我最近遇到了自定义NSButtonCell子类的问题。我们有一个带有白色文本的黑暗界面,所有内容都按预期进行,直到我们尝试创建默认按钮(即指定等效于\r
的键)。我们得到的东西看起来很神秘:挡板画,但文字没有。但如果我把文字变成黑色,它就会画出来。如果我用黑色阴影使文本变白,只有阴影画出来!
当我尝试将测试文本设置为[NSColor redColor]
时,这个谜团开始解开。 (此处的“创建”按钮的密钥等效于\r
,“取消”为Esc
。)
我最终想到的是默认按钮的单元格正在绘制到位图上下文中,可能是因为渲染的字形可以缓存为Aqua外观给出的动画蓝色脉冲背景。这完全有道理,但令人惊讶的是,该位图随后通过乘法合成操作绘制。因此,黑色显示,白色不显示,两者之间的任何显示都变暗。
我设法通过从-drawTitle:withFrame:inView:
中取出文本呈现并在-drawBezelInFrame:inView:
中进行操作来破解解决方法。但是这会被重复调用,所以我需要手动缓存图像。而且它只是概念上的丑陋,因为它特别是渲染标题的错误方法!
我的问题:当然必须有更好的方法,对吧?是否有某种方法可以告诉按钮单元不自动使用此屏幕外渲染路径,即使该按钮是默认的?