从带有视图的xib加载无边框窗口

时间:2012-05-21 15:37:40

标签: cocoa nsview nswindow

我正在尝试从我的程序中的.xib加载无边框窗口。我可以通过覆盖[[[NSWindow]] initWithContentRect:styleMask:backing:defer:]加载无边框窗口,如下所示:

- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag {

    self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag];
    if (!self) {
        return nil;
    }

    [self setOpaque:NO];
    [self setHasShadow:YES];
    [self setLevel:NSFloatingWindowLevel];
    [self setBackgroundColor:[NSColor clearColor]];
    [self setAlphaValue:1.0];

    // Ignore events
    [self setIgnoresMouseEvents:YES];

    return self;    
}

当调用包含[self orderFront:self];的另一个方法时,会显示一个窗口。但是,我有一个单独的.xib文件,其中创建了一个窗口,我希望在调用此方法时显示该窗口。我将文件的所有者设置为NSApplication,窗口本身是包含上述代码的类。当我使用[self orderFront:self];调用方法时,如何在xib中加载窗口并显示它而不是此类创建窗口?

1 个答案:

答案 0 :(得分:2)

如果我了解您要执行的操作,可以使用NSWindowController从单独的nib(或xib)文件加载NSWindow。子类NSWindowController,并将您的控制器代码放在那里。在xib文件中创建该对象并将其设置为文件的所有者。将NSWindow链接到NSWindowController的代表处。

然后它就像:

一样简单
NSWindowController * windowController = [[[YourWindowClass alloc] initWithWindowNibName:@"YourWindowClass"] autorelease];
NSWindow * sheet = [windowController window];