我的应用程序最初有一个窗口(Def)。然后它产生了一个新窗口(新)。所有这两个窗口都可以从Window子菜单项或空间控件切换。
但是如果我试图在OSX 10.6.8上将“新建”窗口设置为假全屏模式,那么如果我通过菜单或空间控制切换到“Def”窗口就会出现问题。我无法“完全”切换回“新”窗口。
// setting a fake full screen window on 10.6.8
NSApplicationPresentationOptions prereqOptions =
NSApplicationPresentationAutoHideDock |
NSApplicationPresentationAutoHideMenuBar;
[[NSApplication sharedApplication]
setPresentationOptions:prereqOptions];
[[self window] setToolbar:nil];
[[self window] setStyleMask:NSBorderlessWindowMask];
[[self window] setFrame:[[NSScreen mainScreen] frame]
display:YES];
“完全”意味着我可以看到“新”被带到屏幕顶部,但是窗口控制器无法接收通知“NSWindowDidBecomeKeyNotification”。此外,通过 [NSApp keyWindow],我可以看到关键窗口始终是“Def”。我总是可以在Window子菜单中看到“Def”。
有人遇到过这个问题吗?
答案 0 :(得分:0)
最后经过2天的调查,答案可以追溯到NSWindow的文件。
有两种相关的方法。
- (BOOL)canBecomeKeyWindow 回报价值 如果窗口可以成为关键窗口,则为YES,否则为NO。
讨论 如果此方法返回NO,则尝试使窗口成为关键窗口。如果窗口有标题栏或调整大小条,则NSWindow实现返回YES,否则返回NO。
和
canBecomeMainWindow 指示窗口是否可以成为应用程序的主窗口。
- (BOOL)canBecomeMainWindow 回报价值 窗口可以成为主窗口时是;否则,NO。
讨论 如果此方法返回NO,则尝试使窗口成为主窗口。如果窗口可见,不是NSPanel对象,并且具有标题栏或调整大小机制,则NSWindow实现返回YES。否则返回NO。
所以结论是,如果窗口没有标题栏或调整大小栏,默认情况下它不能成为主窗口和关键窗口。当[NSWindow setStyleMask:NSBorderlessWindowMask]将窗口设置为10.6.8的假全屏时,标题栏为锣。
要解决此问题,需要在返回YES时覆盖上述2个方法。