在cocoa中设置NSView和NSImageView的背景颜色

时间:2014-06-09 10:29:04

标签: objective-c cocoa background-color

我有一些我在IB中制作的NSViews%NSImageView,如何在应用程序awakesFromNib时为每个设置背景颜色?

谷歌搜索后,我发现可以通过创建自定义类NSView或NSImageView并在其drawRect方法中设置颜色来完成。

他们可以通过其他任何方式设置背景颜色,而无需为View / ImageView创建额外的类。

由于

4 个答案:

答案 0 :(得分:40)

他们是两种设置NSView / NSImageView背景颜色的方法,我找到了。

首先:通过NSView/NSImageView

的子类化
- (void)drawRect:(NSRect)aRect
{
    [[NSColor redColor] set];
    NSRectFill([self bounds]);
}

第二名:

  

不要像你在问题中提到的那样创建子类。   然后

[_backgroundView setWantsLayer:YES];
[_backgroundView.layer setBackgroundColor:[[NSColor redColor] CGColor]]];

此处_backgroundViewNSView/NSImageView的IBOutlet /对象。你只需要访问NSView/NSImageView层就可以给他backgroundcolor而无需继承它们。

答案 1 :(得分:11)

如果没有子类化NSView,您无法绘制自定义内容,但是您可以更改图层的背景颜色。

[yourView setWantsLayer: YES];
[yourView.layer setBackgroundColor: [NSColor redColor].CGColor];

答案 2 :(得分:1)

在Swift中,您可以像这样更改NSImageView的背景颜色:

self.myBackgroundView.wantsLayer = true
self.myBackgroundView.layer?.backgroundColor = NSColor.red.cgColor

如果要将图像用作背景,可以使用以下内容:

self.myBackgroundView.wantsLayer = true
let image : NSImage = #imageLiteral(resourceName: "imageResourceName")
self.myBackgroundView.layer?.backgroundColor = NSColor.init(patternImage: image).cgColor

答案 3 :(得分:0)

您可以通过实现类似这样的类别扩展,通过Interface Builder将背景颜色应用于任何NSView后代:

@implementation NSView (backgroundColor)

- (void)setBgColor:(NSColor *)color {
    //
    [self setWantsLayer:YES];
    self.layer = [CALayer layer];
    [self.layer setBackgroundColor:[color CGColor]];
}

@end

并在IB的“用户定义的运行时属性”面板中为其提供值:

enter image description here