2012-05-21 45 views
0

我想從我的程序中的.xib加載無邊框窗口。我可以通過重寫[[[NSWindow]] initWithContentRect:styleMask:backing:defer:]如下與加載一個無國界的窗口:從視圖的xib加載無邊框窗口

- (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中加載窗口並顯示它,而不是創建一個窗口?

回答

2

如果我明白你要做什麼,可以使用NSWindowController從單獨的nib(或xib)文件加載NSWindow。子類NSWindowController,並將控制器代碼放在那裏。在xib文件中創建該對象並將其設置爲文件的所有者。將NSWindow鏈接到NSWindowController的代理插座。

然後,它的那麼容易,因爲:

NSWindowController * windowController = [[[YourWindowClass alloc] initWithWindowNibName:@"YourWindowClass"] autorelease]; 
NSWindow * sheet = [windowController window]; 
+0

感謝您的幫助 - 儘管這不完全是我想要做的,這個代碼的示例項目幫助! – rick