我的NSButtonCell发生了什么秘密事件?

时间:2014-12-04 22:19:17

标签: objective-c macos cocoa nsbutton nsbuttoncell

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

首先,什么似乎有效?

  1. 我可以设置按钮的图像和标题。图像正常显示。
  2. 故事板将按钮设置为样式:纹理和类型:瞬间变化。它没有边框,不是透明的,也不允许混合状态。
  3. 投诉清单:

    1. 我重写-drawTitle:withFrame:inView:以自定义颜色绘制标题,具体取决于单元格highlighted。当单元格未突出显示时,此颜色#cccccc,但它实际上是#d6d6d6
    2. 该按钮包含图像和备用图像。绘制的图像永远不是替代图像,因此我覆盖-drawImage:withFrame:inView:为细胞highlighted选择正确的图像。这似乎有效,但是什么,NSButtonCell?开/关状态与突出显示有何不同?我尝试了很多类型选项,似乎没有一个更改按下按钮会暂时更改highlighted并切换state的事实。
    3. 说到暂时改变突出显示,它的持续时间似乎尽可能短,所以我不得不实施一种" debouncer"防止-drawWithFrame:inView:被调用的次数超过指定的阈值。
    4. 我的按钮单元格还包含属性myBackgroundColormyAlternateBackgroundColor。我没有使用backgroundColor,因为我需要能够绘制自定义背景形状(填充矩形,填充圆圈等)。 highlighted时使用备用背景颜色。这里的问题是备用背景颜色#93edbf,但似乎是#a1eecb!为了使其看起来像#93edbf,我需要将颜色设置为#84ecb2
    5. 到目前为止,这一切都是关于这个按钮单元的一个特定实例。但在另一个例子中,替代背景根本不是绘图!我已经阅读了故事板代码,按钮尽可能相同。我的视图控制器代码同样更新了两个按钮单元'属性同时。为什么一个按钮的行为与另一个按钮的行为不同?
    6. 我希望按钮在鼠标按下时突出显示而不是"暂时"鼠标放好后我还没有在自定义单元格中实现这一点。男人,NSButtonCell真的缺少一些东西。这样的事情怎么样? OS X和iOS团队是否曾经相互交谈?
    7. 它可能是什么?

      我已经确认该单元格的controlTint设置为NSClearControlTint。我已经检查了背景过滤器,合成过滤器和内容过滤器,因为他们与此有关。

      我知道Apple真的希望我们使用他们的原生外观和UI元素,但我从未想过他们会强行使用一些高亮色调。

0 个答案:

没有答案