【发布时间】:2015-02-06 16:21:51
【问题描述】:
我知道我如何能够以编程方式做到这一点。我知道在为 iOS 创建故事板时非常简单,并且就在属性检查器中。但是,在为 OS X 创建故事板时,我的任何视图控制器或 Xcode 6.1.1 中它下面的视图都看不到它
如何更改视图的背景而无需创建与之关联的视图控制器。我的应用程序有很多简单的视图,但是背景从一个视图更改为下一个视图。
【问题讨论】:
标签: objective-c xcode macos swift nsview
我知道我如何能够以编程方式做到这一点。我知道在为 iOS 创建故事板时非常简单,并且就在属性检查器中。但是,在为 OS X 创建故事板时,我的任何视图控制器或 Xcode 6.1.1 中它下面的视图都看不到它
如何更改视图的背景而无需创建与之关联的视图控制器。我的应用程序有很多简单的视图,但是背景从一个视图更改为下一个视图。
【问题讨论】:
标签: objective-c xcode macos swift nsview
你不应该需要一个新的 viewController 来改变一个 NSView 的背景。如果你没有继承 NSView,那么你可以简单地调用:
myView.wantsLayer = true
myView.layer!.backgroundColor = CGColorGetConstantColor(kCGColorBlack)
我不确定您是否可以在情节提要中严格执行此操作,但您可以使用用户定义的运行时属性在情节提要中设置 WantLayer = 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 方法)。
【讨论】: