我要做的就是在NSWindow实例的内容视图中添加一个新视图。当我执行以下操作时,看不到新视图(应为黑色,并占据整个窗口)。我究竟做错了什么?
(响应按钮单击而完成)
NSRect frameRect = [self.window frame];
frameRect.origin = NSZeroPoint;
NSView *view = [[NSView alloc] initWithFrame:frameRect];
view.wantsLayer = YES;
view.layer.backgroundColor = [NSColor blackColor].CGColor;
[self.window.contentView addSubview:view];
最佳答案
我已经建立了一个简单的项目,并在ViewController中带有一个按钮,并收到访问self.window
的警告。使用self.view.window
时,警告消失,您提供的代码按预期工作。
更新的代码
NSRect frameRect = [self.view.window frame];
frameRect.origin = NSZeroPoint;
NSView *view = [[NSView alloc] initWithFrame:frameRect];
view.wantsLayer = YES;
view.layer.backgroundColor = [NSColor blackColor].CGColor;
[self.view.window.contentView addSubview:view];
更新资料
假设您正在使用WindowController的实例,在该实例中以编程方式添加按钮,则您的代码将按预期工作。
@implementation WindowController
- (void)windowDidLoad
{
[super windowDidLoad];
CGRect buttonRect = CGRectMake(self.window.frame.size.width / 2 - 50,
self.window.frame.size.height / 2,
100,
50);
NSButton *button = [[NSButton alloc] initWithFrame:NSRectFromCGRect(buttonRect)];
[button setTitle: @"Click me!"];
[button setTarget:self];
[button setAction:@selector(buttonPressed)];
[self.window.contentView addSubview:button];
}
- (void)buttonPressed
{
NSRect frameRect = [self.window frame];
frameRect.origin = NSZeroPoint;
NSView *view = [[NSView alloc] initWithFrame:frameRect];
view.wantsLayer = YES;
view.layer.backgroundColor = [NSColor blackColor].CGColor;
[self.window.contentView addSubview:view];
}
NSViewController
的实例没有window
的属性-只有NSWindowController
具有一个。