设置NSView的背景颜色

pme*_*ino 3 macos cocoa objective-c

我想用自定义NSColor背景([NSColor colorWithPatternImage:[NSImage imageNamed:@"pattern.png"]])设置自定义视图(不是主视图).我已经尝试制作自定义视图类:

.H

#import <AppKit/AppKit.h>

@interface CustomBackground : NSView {
    NSColor *background; 
}
@property(retain) NSColor *background;
@end
Run Code Online (Sandbox Code Playgroud)

.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
Run Code Online (Sandbox Code Playgroud)

然后在AppDelegate中:

[self.homeView changeColor:[NSColor colorWithPatternImage:[NSImage imageNamed:@"pattern.png"]]];
Run Code Online (Sandbox Code Playgroud)

但没有任何反应,颜色保持不变.怎么了?或者有更简单的方法吗?NSView没有backgroundColor属性:(

SMS*_*SMS 9

尝试

[self.homeView setWantsLayer:YES];
self.homeView.layer.backgroundColor = [NSColor redColor].CGColor;
Run Code Online (Sandbox Code Playgroud)

  • 请提供一些解释. (2认同)
  • 这是关于 NSView (Cocoa) 而不是 UIView (Cocoa Touch) 的问题。这也不是在 UIView 中执行此操作的最佳方法。 (2认同)

Isa*_*bel 6

最好使用setBackground:您从background酒店获得的已经制作的方法.所以用下面的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];
}
Run Code Online (Sandbox Code Playgroud)

要更改视图的颜色,您可以简单地执行以下操作:

self.homeView.background = [NSColor colorWithPatternImage:[NSImage imageNamed:@"pattern.png"]]
Run Code Online (Sandbox Code Playgroud)

  • NSView没有后台属性,甚至没有被弃用的属性......我缺少什么? (4认同)