将背景颜色设置为 NSView

发布于 2024-11-27 05:39:29 字数 802 浏览 5 评论 0原文

我想念什么?颜色不会改变。

#import "controller.h"
#import "backgroundView.h"
@implementation controller
-(void)awakeFromNib {
    backgroundView *background = [[backgroundView alloc] init];
    [background setBackgroudColor:[NSColor whiteColor]];
    //also didn't work 
    //[background setBackgroudColor:[[NSColor whiteColor] retain]];
}
@end

//backgroundView.h
#import <Cocoa/Cocoa.h>

@interface backgroundView : NSView{
    NSColor *color;
}
-(void)setBackgroudColor:(NSColor*)newColor;
@end
#import "backgroundView.h"
@implementation backgroundView
-(void)dealloc{
    [super dealloc];
}
-(void)setBackgroudColor:(NSColor*)newColor{
    color = newColor;
    [self setNeedsDisplay:YES];
}
-(void)drawRect:(NSRect)rect{
    [color setFill];
    NSRectFill(rect);
}
@end

What I miss? color won't change.

#import "controller.h"
#import "backgroundView.h"
@implementation controller
-(void)awakeFromNib {
    backgroundView *background = [[backgroundView alloc] init];
    [background setBackgroudColor:[NSColor whiteColor]];
    //also didn't work 
    //[background setBackgroudColor:[[NSColor whiteColor] retain]];
}
@end

//backgroundView.h
#import <Cocoa/Cocoa.h>

@interface backgroundView : NSView{
    NSColor *color;
}
-(void)setBackgroudColor:(NSColor*)newColor;
@end
#import "backgroundView.h"
@implementation backgroundView
-(void)dealloc{
    [super dealloc];
}
-(void)setBackgroudColor:(NSColor*)newColor{
    color = newColor;
    [self setNeedsDisplay:YES];
}
-(void)drawRect:(NSRect)rect{
    [color setFill];
    NSRectFill(rect);
}
@end

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

玩心态 2024-12-04 05:39:29
  1. 您应该在 setBackgroundColor: 方法中保留 newColor
  2. dealloc 中释放 color ivar
  3. 在 awakeFromNib 方法中,您使用 init 初始化视图,但指定的初始化程序是 initWithFrame:
  4. 有没有将新创建的视图添加到超级视图的代码。
  5. 您还可以尝试对 NSColor 使用 set 而不是 setFill
  1. You should retain newColor in setBackgroundColor: method.
  2. Release color ivar in dealloc
  3. In awakeFromNib method you initialize your view with init, but designated initializer is initWithFrame:
  4. There's no code where you add newly created view to superview.
  5. You can also try to use set instead of setFill for NSColor
意中人 2024-12-04 05:39:29

您正在 awakeFromNib 中创建一个视图,该视图附加到任何地方。相反,您应该在 Interface Builder 中更改视图的自定义类,在此视图上设置一个插座并对其调用 setBackgroudColor:

另外,类应该以大写字母开头,因此 backgroundView 应该是 BackgroundView。正如 Andriy 所说,请确保修复 color ivar 的内存管理。

You are creating a view in awakeFromNib which is attached to nowhere. Instead you should change the custom class of your view in Interface Builder, setup an outlet on this view and call setBackgroudColor: on it.

Also, classes should start with a capital letter so backgroundView should be BackgroundView. As Andriy said, make sure to fix the memory management of your color ivar.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文