我有一个Source-View(NSOutlineView
),底部有两个按钮。我添加了一个NSBox
,以便当这些项目位于按钮后面时,这些项目不会“闪烁”。
当窗口处于活动状态时,此方法正常:
但是一旦我停用了窗口,NSBox
仍然具有该活动颜色,而不是与NSOutlineView
的背景颜色匹配的灰色版本:
如何确保这两种颜色始终匹配。使用特定颜色也是一种黑客攻击,因为NSOutline
使用的颜色可能会在某些时候发生变化。
更新:Apple的Mail.app以及Things似乎都有针对该问题的解决方案。 : - /
答案 0 :(得分:2)
@Neha让我找到了解决问题的正确方法。
我在Ruby中编写它因为我使用Rubymotion但它很容易翻译:)
假设你有一个box
出口用于NSBox,你可以在窗口失去焦点时将其设置为透明,并在它成为关键窗口时使用相应的委托方法执行相反的操作:
def windowDidBecomeKey(notification)
box.setTransparent(false)
end
def windowDidResignKey(notification)
box.setTransparent(true)
end
结果看起来很好:
没有它:
答案 1 :(得分:1)
解决方案是保留对NSOutlineView的backgroundColor
属性的引用,因为它是一个特殊的NSColor
,它根据父窗口的键状态动态变化。将自定义视图的颜色设置为该引用的颜色。当窗口失去/获得密钥状态时,请在自定义视图上调用setNeedsDisplay:
以使用新颜色重新绘制它。使用KVO观察NSWindowDidBecomeKeyNotification
和NSWindowDidResignKeyNotification
。请注意,指向颜色的指针保持不变,但引用所代表的实际颜色会发生变化。解决方案解释为here。
答案 2 :(得分:0)
在NSBox
的属性检查器中,
将显示设置为透明