我正在尝试从我的程序中的.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中加载窗口并显示它而不是此类创建窗口?
答案 0 :(得分:2)
如果我了解您要执行的操作,可以使用NSWindowController
从单独的nib(或xib)文件加载NSWindow
。子类NSWindowController,并将您的控制器代码放在那里。在xib文件中创建该对象并将其设置为文件的所有者。将NSWindow链接到NSWindowController的代表处。
然后它就像:
一样简单NSWindowController * windowController = [[[YourWindowClass alloc] initWithWindowNibName:@"YourWindowClass"] autorelease];
NSWindow * sheet = [windowController window];