【问题标题】:Add / Remove buttons in NSOutlineView在 NSOutlineView 中添加/删除按钮
【发布时间】:2013-10-15 08:01:24
【问题描述】:

我有一个底部有两个按钮的源视图 (NSOutlineView)。我添加了一个NSBox,这样当它们位于按钮后面时,它们就不会“发光”。

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

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

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

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

【问题讨论】:

  • 您找到解决方案了吗?
  • 没有,你有吗? :-) 我目前正在使用 NSView 来屏蔽背景中的滚动视图中的按钮。然而,Apple Mail 做到了这一点和事情(来自 Cultured Code)。我想知道他们是怎么做到的。

标签: objective-c macos cocoa nsoutlineview nsbox


【解决方案1】:

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

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

假设你有一个 NSBox 的box 出口,你可以在窗口失去焦点时将其设置为透明,当它成为关键窗口时,使用适当的委托方法将其设置为透明:

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

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

焦点看起来不错:

没有它:

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 好吧,但是这些物品再次“闪耀”,我一开始就不需要这个盒子
      猜你喜欢
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多