【问题标题】:loading a borderless window from a xib with view从带有视图的 xib 加载无边框窗口
【发布时间】:2012-05-21 15:37:39
【问题描述】:

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

【问题讨论】:

    标签: cocoa nsview nswindow


    【解决方案1】:

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

    那么就这么简单:

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

    【讨论】:

    • 感谢您的帮助 - 虽然这不是我想要做的,但使用此代码的示例项目有所帮助!
    猜你喜欢
    • 2015-05-21
    • 2013-08-09
    • 2012-05-14
    • 1970-01-01
    • 2022-01-02
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多