设置 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的颜色?