从NSVisualEffectView vibrancy中选择退出无边界NSButton

时间:2015-11-01 21:19:46

标签: macos cocoa nsbutton nsvisualeffectview

我有一个带有活力的NSVisualEffectView,包含文本字段(NSTextField或NSComboBox)和无边框按钮。按钮位于文本字段上方,我想禁用无边框按钮上的活力效果,因为它们应该出现在文本字段的白色背景上。

根据NSVisualEffectView类引用中的建议,我尝试做的是将我的NSButton包装在另一个NSVisualEffectView中,并将其状态设置为Inactive。它的作用是用浅灰色背景取代“充满活力”的背景。

下图说明了这一点。第一个字段是我尝试的解决方案,第二个字段显示无边框按钮的默认行为,作为NSVisualEffectView的子节点。

enter image description here

我还尝试了对NSButton进行子类化并将其单元格背景颜色设置为白色或透明但我总是得到灰色背景。

如何将浅灰色背景更改为白色或透明背景? 感谢

1 个答案:

答案 0 :(得分:4)

经过几个小时的头痛后,我设法解决了这个问题。该解决方案不需要将按钮包装在NSVisualEffectView中。简单地继承NSButton并覆盖allowsVibrancy属性并将其设置为false就足够了。

在斯威夫特:

override var allowsVibrancy: Bool { return false }