2

我正在编写一个 OS X 应用程序(目标 10.10,Xcode 6.1),我对我的自定义 NSButtonCell 子类感到非常困惑。似乎这里发生了不应该发生的事情。我是 OS X 编程的新手,所以我问是否有人深入了解 NSButtonCell 的内部工作原理。

首先,什么似乎有效?

  1. 我可以设置按钮的图像和标题。图像正常显示。
  2. 故事板将按钮设置为 Style: Textured 和 Type: Momentary Change。它不是有边界的,不是透明的,也不允许混合状态。

投诉清单:

  1. 我重写-drawTitle:withFrame:inView:以根据单元格的自定义颜色绘制标题highlighted。这种颜色应该#cccccc单元格未突出显示时的颜色,但实际上是#d6d6d6.
  2. 该按钮具有图像和备用图像。绘制的图像永远不是备用图像,因此我覆盖-drawImage:withFrame:inView:为单元格的highlighted. 这似乎可行,但到底是什么,NSButtonCell?开/关状态与突出显示有何不同?highlighted我已经尝试了许多类型选项,但似乎都没有改变按下按钮会瞬间改变和切换的事实state
  3. 说到瞬间改变突出显示,它的持续时间似乎尽可能短,所以我必须实现一种“去抖动器”来防止-drawWithFrame:inView:被调用的频率超过指定的阈值。
  4. 我的纽扣电池也有属性myBackgroundColormyAlternateBackgroundColor. 我没有使用backgroundColor,因为我需要能够绘制自定义背景形状(填充矩形、填充圆形等)。时使用备用背景颜色highlighted。这里的问题是备用背景颜色应该#93edbf但似乎是#a1eecb!为了让它看起来像#93edbf,我需要将颜色设置为#84ecb2
  5. 到目前为止,这都是关于这个纽扣电池的一个特定实例。但在另一种情况下,替代背景根本没有绘制!我已经阅读了故事板代码,并且按钮尽可能相同。我的视图控制器代码同样会同时更新两个按钮单元的属性。为什么一个按钮的行为与另一个不同?
  6. 我希望按钮在鼠标按下时突出显示,而不是在鼠标抬起后“暂时”突出显示。我还没有在我的自定义单元格中实现这个。伙计,NSButtonCell 确实缺少一些东西。怎么会发生这样的事情?OS X 和 iOS 团队不曾相互交谈吗?

会是什么呢?

我已经验证了单元格的controlTint设置为NSClearControlTint. 我检查了背景过滤器、合成过滤器和内容过滤器,以防它们与此有关。

我知道 Apple 确实希望我们对 UI 元素使用他们的原生外观和感觉,但我从没想过他们会强制使用一些高光色调。

4

0 回答 0