0

我正在尝试从程序中的 .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 中加载窗口并显示它而不是此类创建窗口?

4

1 回答 1

2

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

然后就很简单了:

NSWindowController * windowController = [[[YourWindowClass alloc] initWithWindowNibName:@"YourWindowClass"] autorelease];
NSWindow * sheet = [windowController window];
于 2012-05-21T16:58:45.823 回答