在NSOutlineView中添加/删除按钮

时间:2013-10-15 08:01:24

标签: objective-c macos cocoa nsoutlineview nsbox

我有一个Source-View(NSOutlineView),底部有两个按钮。我添加了一个NSBox,以便当这些项目位于按钮后面时,这些项目不会“闪烁”。

当窗口处于活动状态时,此方法正常:

enter image description here

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

enter image description here

如何确保这两种颜色始终匹配。使用特定颜色也是一种黑客攻击,因为NSOutline使用的颜色可能会在某些时候发生变化。

更新:Apple的Mail.app以及Things似乎都有针对该问题的解决方案。 : - /

3 个答案:

答案 0 :(得分:2)

@Neha让我找到了解决问题的正确方法。

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

假设你有一个box出口用于NSBox,你可以在窗口失去焦点时将其设置为透明,并在它成为关键窗口时使用相应的委托方法执行相反的操作:

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

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

结果看起来很好:

enter image description here

没有它:

enter image description here

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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