我正在编写一个 OS X 应用程序(目标 10.10,Xcode 6.1),我对我的自定义 NSButtonCell 子类感到非常困惑。似乎这里发生了不应该发生的事情。我是 OS X 编程的新手,所以我问是否有人深入了解 NSButtonCell 的内部工作原理。
首先,什么似乎有效?
- 我可以设置按钮的图像和标题。图像正常显示。
- 故事板将按钮设置为 Style: Textured 和 Type: Momentary Change。它不是有边界的,不是透明的,也不允许混合状态。
投诉清单:
- 我重写
-drawTitle:withFrame:inView:
以根据单元格的自定义颜色绘制标题highlighted
。这种颜色应该是#cccccc
单元格未突出显示时的颜色,但实际上是#d6d6d6
. - 该按钮具有图像和备用图像。绘制的图像永远不是备用图像,因此我覆盖
-drawImage:withFrame:inView:
为单元格的highlighted
. 这似乎可行,但到底是什么,NSButtonCell?开/关状态与突出显示有何不同?highlighted
我已经尝试了许多类型选项,但似乎都没有改变按下按钮会瞬间改变和切换的事实state
。 - 说到瞬间改变突出显示,它的持续时间似乎尽可能短,所以我必须实现一种“去抖动器”来防止
-drawWithFrame:inView:
被调用的频率超过指定的阈值。 - 我的纽扣电池也有属性
myBackgroundColor
和myAlternateBackgroundColor
. 我没有使用backgroundColor
,因为我需要能够绘制自定义背景形状(填充矩形、填充圆形等)。时使用备用背景颜色highlighted
。这里的问题是备用背景颜色应该是#93edbf
但似乎是#a1eecb
!为了让它看起来像#93edbf
,我需要将颜色设置为#84ecb2
。 - 到目前为止,这都是关于这个纽扣电池的一个特定实例。但在另一种情况下,替代背景根本没有绘制!我已经阅读了故事板代码,并且按钮尽可能相同。我的视图控制器代码同样会同时更新两个按钮单元的属性。为什么一个按钮的行为与另一个不同?
- 我希望按钮在鼠标按下时突出显示,而不是在鼠标抬起后“暂时”突出显示。我还没有在我的自定义单元格中实现这个。伙计,NSButtonCell 确实缺少一些东西。怎么会发生这样的事情?OS X 和 iOS 团队不曾相互交谈吗?
会是什么呢?
我已经验证了单元格的controlTint
设置为NSClearControlTint
. 我检查了背景过滤器、合成过滤器和内容过滤器,以防它们与此有关。
我知道 Apple 确实希望我们对 UI 元素使用他们的原生外观和感觉,但我从没想过他们会强制使用一些高光色调。