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) ファイルからNSWindowControllerをロードするために使用できます。NSWindowNSWindowController をサブクラス化し、そこにコントローラー コードを配置します。そのオブジェクトを xib ファイルに作成し、それをファイルの所有者に設定します。NSWindow を NSWindowController のデリゲート アウトレットにリンクします。

次に、次のように簡単です。

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