OS X 使用故事板时如何为 NSView 创建背景

How to create background for NSView when using storyboards with OS X

我知道如何以编程方式执行此操作。我知道为 iOS 创建故事板非常简单,而且就在属性检查器中。但是,当为 OS X 创建故事板时,我在 Xcode 6.1.1

中没有看到任何视图控制器或其下方的视图

如何在不创建与之关联的视图控制器的情况下更改视图的背景。我的应用程序有很多简单的视图,但背景颜色会从一个视图变为下一个视图。

您不需要新的 viewController 来更改 NSView 的背景。如果你不是 NSView 的子类,那么你可以简单地调用:

myView.wantsLayer = true
myView.layer!.backgroundColor = CGColorGetConstantColor(kCGColorBlack)

我不确定您是否可以在情节提要中严格执行此操作,但您可能可以使用用户定义的运行时属性在情节提要中设置 wantsLayer = true。

如果您对 NSView 进行子类化并将该子类分配给您的视图,则可以在故事板中更改 NSView 的背景颜色:

使用这个子类实现:

import Cocoa

class ViewWithBackgroundColor : NSView {
    @IBInspectable var backgroundColor: NSColor? {
        get {
            guard let layer = layer, backgroundColor = layer.backgroundColor else { return nil }
            return NSColor(CGColor: backgroundColor)
        }

        set {
            wantsLayer = true
            layer?.backgroundColor = newValue?.CGColor
        }
    }

    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
}

背景颜色在设计时不显示,但在 运行 时显示。

也许有人想到了如何在设计时也更新视图(最好不要重写 draw 方法)。

这是实现相同效果的另一种方法。

在你的 NSView 下添加 NSBox 并调整 NSBox 的框架与 NSView 相同。

将标题位置更改为 None,将框类型更改为 自定义,将边框类型更改为 None

这是截图:

然后将您的 NSView、NSButton、NSTextField 或其他任何内容添加为 NSBox 的子视图。

这是结果: