【问题标题】:How to give NSWindow a particular background color如何给 NSWindow 一个特定的背景颜色
【发布时间】:2008-12-29 11:43:54
【问题描述】:

我正在编写一个具有 NSWindow 的可可应用程序。我想将窗口的背景颜色更改为特定颜色。但是检查器中的窗口属性仅提供“纹理窗口”替代方案。如何使窗口的颜色随心所欲?

【问题讨论】:

    标签: cocoa interface-builder


    【解决方案1】:

    尝试调用实例方法 setBackgroundColor: 并在您的窗口实例上使用颜色。名字里有什么.. ;)

    像这样:

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
        // Option 1
        [self.window setBackgroundColor: NSColor.whiteColor];
        // Option 2 - using dot syntax
        self.window.backgroundColor = NSColor.whiteColor;
    }
    

    【讨论】:

    • 自此答案以来是否有重大更新? window 未定义,当我实际获得窗口引用时,backgroundColorsetBackgroundColor 什么也不做。
    • 同意。这适用于 UIKit(使用 UIColor),但不适用于 AppKit。
    • @Jeff 此代码必须是自定义 NSWindowController 子类的一部分,您最好将其放入 awakeFromNib 中,以便在您的窗口从 Nib 文件加载时调用。
    • @Zev 它与 AppKit 配合得很好,2 年前就已经在使用这个代码了。但是请参阅 Arclite 的答案,它只有在窗口被配置为纹理时才会起作用。
    • self.window 在使用情节提要时不可用。
    【解决方案2】:

    更改窗口背景最简单的方法是直接在您的 .xib 文件中进行设置。

    根本没有代码:

    1. 选择您的窗口(NSWindow 类应出现在 Class 字段中)
    2. 单击用户定义的运行时属性下的 [+] 按钮
    3. 输入“backgroundColor”并选择颜色

    【讨论】:

    • 它适用于 10.10,刚刚为@SpaceDog 拍摄了一段特别视频:http://www.youtube.com/watch?v=I0AHPxvNlp8
    • 我发现由于某种原因,部分或全部用户定义的运行时属性在生成的故事板中的 NSWindow 实例(10.10 和 XCode 6.4)上不起作用。我首先使用 titlebarAppearsTransparent 遇到了它,然后使用 backgroundColor 确认了相同的行为。仅仅为了配置而不得不回到子类化非常烦人。
    【解决方案3】:

    只要你只想改变内容区域的背景颜色,而不是框架和工具栏,你就不需要子类NSWindow。您需要做的是继承NSView 并让您的自定义视图绘制您想要的颜色,然后将该类的一个实例设置为窗口的内容视图。

    或者,您可以将无边框的NSImageViewNSColorWell 设置为内容视图,但我不确定Apple 是否意味着这些视图具有子视图。如果没有,您必须将窗口留空。

    也就是说,您应该真的确定自定义背景颜色是合适的。几乎总是如此,您应该坚持使用 Aqua 或 HUD 外观。

    【讨论】:

      【解决方案4】:

      你必须继承 NSWindow 才能改变背景,然后重写实现

      - (id)initWithContentRect:(NSRect)contentRect
                      styleMask:(NSUInteger)styleMask
                        backing:(NSBackingStoreType)bufferingType
                          defer:(BOOL)flag
      

      例如,参见 Mat Gemmell 的 HUDWindow:http://mattgemmell.com/2006/03/12/hudwindow

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-08
        • 2022-11-03
        • 2019-08-21
        • 1970-01-01
        • 2013-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多