1

我有一个NSOutlineView底部有两个按钮的 Source-View ( )。我添加了一个NSBox,这样当它们在按钮后面时,它们就不会“发光”。

当窗口处于活动状态时,这可以正常工作:

在此处输入图像描述

但是,一旦我停用窗口,它仍然具有该活动颜色,而不是与背景颜色NSBox相匹配的暗色版本:NSOutlineView

在此处输入图像描述

我怎样才能确保这两种颜色始终匹配。使用特定颜色也有点麻烦,因为颜色NSOutline使用可能会在某些时候发生变化。

更新:Apple 的 Mail.app 以及Things似乎有解决这个问题的方法。:-/

4

3 回答 3

2

@Neha 让我找到了解决方案。

我用 Ruby 编写它,因为我使用 Rubymotion,但它很容易翻译 :)

假设您有boxNSBox 的出口,您可以在窗口失去焦点时将其设置为透明,并在它成为关键窗口时使用适当的委托方法将其设置为相反:

  def windowDidBecomeKey(notification)
    box.setTransparent(false)
  end

  def windowDidResignKey(notification)
    box.setTransparent(true)
  end

结果看起来很好,重点是:

在此处输入图像描述

没有它:

在此处输入图像描述

于 2013-10-22T14:49:19.897 回答
1

解决方案是保留对 NSOutlineViewbackgroundColor属性的引用,因为它是NSColor根据父窗口的键状态动态变化的特殊属性。将自定义视图的颜色设置为该引用。当窗口失去/获得关键状态时,调用setNeedsDisplay:您的自定义视图以使用新颜色重新绘制它。使用 KVO 观察NSWindowDidBecomeKeyNotificationNSWindowDidResignKeyNotification。请注意,指向颜色的指针保持不变,但引用所代表的实际颜色会发生变化。解决方案在这里解释。

于 2015-10-26T01:32:38.320 回答
0

在 的属性检查器中NSBox,将显示设置为透明

于 2013-10-15T10:04:17.953 回答