设置 NSView 的背景颜色

Posted

技术标签:

【中文标题】设置 NSView 的背景颜色【英文标题】:Setting the background color of an NSView 【发布时间】:2011-11-24 08:47:21 【问题描述】:

我想设置一个带有自定义 NSColor 背景 ([NSColor colorWithPatternImage:[NSImage imageNamed:@"pattern.png"]]) 的自定义视图(不是主视图)。我试过制作一个自定义视图类:

.h

#import <AppKit/AppKit.h>

@interface CustomBackground : NSView 
    NSColor *background; 

@property(retain) NSColor *background;
@end

.m

#import "CustomBackground.h"

@implementation CustomBackground
@synthesize background;

- (void)drawRect:(NSRect)rect

    [background set];
    NSRectFill([self bounds]);


- (void)changeColor:(NSColor*) aColor

    background = aColor;
    [aColor retain];

@end

然后在 AppDelegate 中:

[self.homeView changeColor:[NSColor colorWithPatternImage:[NSImage imageNamed:@"pattern.png"]]];

但什么也没发生,颜色保持不变。怎么了?或者有没有更简单的方法? NSView 没有backgroundColor 属性:(

【问题讨论】:

这应该是最好的办法:***.com/questions/2962790/… 【参考方案1】:

试试

[self.homeView setWantsLayer:YES];
self.homeView.layer.backgroundColor = [NSColor redColor].CGColor;

【讨论】:

请提供一些解释。 这是通过子类化 UIView 并调用 draw rect 来更改颜色的最佳解决方案。谢谢, 这是一个关于 NSView (Cocoa) 而不是 UIView (Cocoa Touch) 的问题。在 UIView 中也不是最好的方法。【参考方案2】:

最好使用从background 属性中获得的已创建的setBackground: 方法。因此,将您的 changeColor: 方法替换为:

-(void)setBackground:(NSColor *)aColor

    if([background isEqual:aColor]) return;
    [background release];
    background = [aColor retain];

    //This is the most crucial thing you're missing: make the view redraw itself
    [self setNeedsDisplay:YES];

要更改视图的颜色,您只需执行以下操作:

self.homeView.background = [NSColor colorWithPatternImage:[NSImage imageNamed:@"pattern.png"]]

【讨论】:

(1) 为什么要检查background是不是nil?如果是,release 消息将什么也不做。 (2) 为什么在分配新颜色之前立即将nil 分配给background NSView 没有背景属性,甚至没有一个已弃用的属性......我错过了什么?

以上是关于设置 NSView 的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Swift在Cocoa App中设置NSView的颜色?

如何使用 Swift 在 Cocoa App 中设置 NSView 的颜色?

更改视图的背景颜色似乎很难?

word表格背景颜色设置 word表格如何设置背景颜色

QT QPushButton背景颜色设置问题

怎么设置Visual Studio代码窗口背景颜色