看不到新的子视图

时间:2014-10-05 15:14:17

标签: objective-c cocoa nsview

我想要做的就是在我的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];

1 个答案:

答案 0 :(得分:2)

我在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有一个属性。