0

我从 Xcode 模板为基于非文档的 Cocoa 应用程序创建了我的项目。

我有一个习惯NSWindowController,在启动时实例化后,它拥有默认窗口(在 中定义MainMenu.xib)。

如果我让应用程序代理的窗口保持原样,我可以使用command-F-toggleFullscreen:在菜单项中设置为)切换全屏模式,或者我可以通过按退出全屏ESC

一旦我将我的窗口控制器设置为窗口的delegate(我需要它来对进入/退出全屏等进行一些 OpenGL 调整),我仍然可以按 进入全屏command+F,但我不能再退出全屏(保存command+tab到另一个应用程序,或command+Q)。

此外,Apple 文档提到将菜单操作设置为-toggleFullscreen: ,将目标设置为nil. 这最后一部分是如何在 Interface Builder 中完成的?(我将动作连接到 First Responder 的-toggleFullscreen:

我应该怎么办?

4

1 回答 1

1

所以,我发现了问题(在 SO 中发布问题似乎是找到解决方案的条件,总是......)

违规行不是设置委托,而是我在进入全屏模式后对窗口所做的事情。[window setStyleMask:NSBorderlessWindowMask];特别是,当我在下面的代码中注释掉以下行时 :

- (void) windowDidEnterFullScreen:(NSNotification*) notification
{
    NSWindow* window = [self window];

    NSRect mainDisplayRect = [[NSScreen mainScreen] frame];
    [window setStyleMask:NSBorderlessWindowMask];
    [window setContentSize:mainDisplayRect.size];
    [window setLevel:NSMainMenuWindowLevel + 1];
    [window makeKeyAndOrderFront:self];

    NSRect windowFrame = [window frame];
    windowFrame.origin.x = 0;
    windowFrame.origin.y = 0;
    [window setFrame:windowFrame display:YES];
}

...修复了预期的进入/退出全屏模式行为。

于 2013-09-15T10:02:18.437 回答