Objective c 更换窗口后退出山狮全屏休息';s代表

Objective c 更换窗口后退出山狮全屏休息';s代表,objective-c,macos,cocoa,osx-lion,fullscreen,Objective C,Macos,Cocoa,Osx Lion,Fullscreen,我从Xcode模板为非基于文档的Cocoa应用程序创建了我的项目 我有一个自定义的NSWindowController,它在启动时被实例化后,占据默认窗口(在MainMenu.xib中定义) 如果我将应用程序代理的窗口保持原样,我可以使用命令-F(在菜单项中设置为-toggleFullscreen:)切换全屏模式,或者我可以按ESC退出全屏模式 一旦我将窗口控制器设置为窗口的代理(我需要它在进入/退出全屏时进行一些OpenGL调整,等等),我仍然可以通过按command+F进入全屏,但我不能再退

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

我有一个自定义的
NSWindowController
,它在启动时被实例化后,占据默认窗口(在
MainMenu.xib
中定义)

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

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

此外,Apple文档提到将菜单操作设置为
-切换全屏:
,将目标设置为
nil
。最后一部分是如何在Interface Builder中完成的?(我将动作连接到第一响应者的
-切换全屏:

我该怎么办?

因此,我发现了问题(在So中发布问题似乎是找到解决方案的一个条件,总是…)

令人不快的一行不是设置代理,而是我在进入全屏模式后对窗口所做的操作。特别是,当我注释掉下面这行时
[窗口设置样式掩码: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];
}

…预期的进入/退出全屏模式行为已修复

Cocoa桌面有时会非常复杂。每次我想实现某个东西时,我都会在开发人员库中打开10个浏览器窗口。您可以回答自己的问题,这样人们就会知道这个问题得到了回答。在那里,我将编辑移到了专用答案!你知道你也可以把它标记为正确的,这样它就会显示为绿色+1第一句:D(当然是解决问题)