NSTabView与背景颜色

时间:2011-11-11 06:56:35

标签: macos cocoa nscolor nstabview

正如其他地方所讨论的那样,NSTabView没有setBackgroundColor方法并且继承NSTabView并使用drawRect控制它不再起作用 - 因为它不会绘制前10%,即位于分段控制按钮下方的位。

现在我对解决这个问题的工作量感到有些惊讶;见

我想知道我是否走错了路。如何更好地做到这一点&更简单的:

  • NSSegmentStyleTexturedSquare似乎让我产生了一个半透明的分段控件。这意味着我需要做额外的工作来隐藏任何边框线(第240,253行)。

    • 有更好的方法吗?即否定其透明度?

    • 或者有没有办法可以使用实际/原始的分段选择按钮?

  • 我发现我需要的颜色 - 比如[NSColor windowBackgroundColour]没有设置为任何有用的颜色(即一个是透明的) - 所以现在我对它们进行硬编码(第87,94行)。

    • 有更好的方法吗?
  • 我发现我需要一大堆蓬松的方法来保持同步(第128,134行等)。

    • 可以避免吗?
  • 我发现在重新缩放时模仿聪明意味着我需要不断关注分段控制框并删除/调整它。即便如此 - 它还不如原来的

    • 有没有比第157行更好的方法 - 即听说调整大小?而不是一直这样做?
  • 当焦点从窗口移开时,segementControl会变暗 - 与真正的McCoy不同。

    • 可以轻易预防吗?有没有一种便宜的方式来跟踪这个?
  • 或者这是错误的方法 - 我应该只关注这里的透明孔 - 并让NSTabViewItem绘制背景?但无论如何 - 那么我仍然遇到了Segemented COntrol框的问题 - 或者只是让它再次成为默认值。

    • 在尝试这个时 - 我被卡在“真实”窗口背景颜色中的前20-30像素 - 这是'透明' - 因此颜色不会一直运行到顶部或后面分段栏和挡板 - 但是在段控件底部下方停止约8个像素。

反馈意见 - 因为对于这么简单的事情,这感觉太过/不理想了 - 非常感谢。布朗尼指出黑客/分支github代码:) :) :)作为一行运行代码说超过一千字。

DW传递。

3 个答案:

答案 0 :(得分:1)

PSMTabBarControl可能是最适合您的解决方法。我创建了几个自定义选项卡视图,但是cocoa与此控件不兼容。 PSMTabBarControl已更新为支持Xcode 4. https://github.com/ciaran/psmtabbarcontrol

答案 1 :(得分:0)

您是否尝试过设置其基础CALayer的背景颜色? (通过设置wantsLayer = YES,使其成为图层支持的视图,如果它已经不存在。)

答案 2 :(得分:0)

如果你的情况可以容忍一些脆弱性,一个非常简单快速的方法是子类NSTabView并手动调整项目子视图的框架。这为每个项目提供了无缝的黄色背景:

- (void)drawRect:(NSRect)dirtyRect {
    static const NSRect offsetRect = (NSRect) { -2, -16, 4, 18 };

    NSRect rect = self.contentRect;

    rect.origin.x += offsetRect.origin.x;
    rect.origin.y += offsetRect.origin.y;
    rect.size.width += offsetRect.size.width;
    rect.size.height += offsetRect.size.height;

    [[NSColor yellowColor] set];
    NSRectFill(rect);

    [super drawRect:dirtyRect];
}

NSTabView指标的未来变化显然会成为一个问题,因此请自行承担风险!