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 的子视图。
这是结果:
我知道如何以编程方式执行此操作。我知道为 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 的子视图。
这是结果: