我的应用程序中有一个带有按钮的主NSWindow
。按下按钮时,它会执行以下操作:
NSWindow *newWindow = [NSWindow initWithContentRect:[screen frame] styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
[newWindow makeKeyAndOrderFront:self];
[self.previousWindow orderOut:self];
这大部分时间都可以正常工作,但如果我打开第二个窗口(称为“其他”窗口)并在按下按钮之前在另一个屏幕上,则会发生以下情况:
查看堆栈跟踪,我可以看到,由于发送了一些通知,“其他”窗口正在变为密钥。这不是我的应用程序所以必须是一个Cocoa的东西。鉴于我明确说明哪个窗口应该是关键窗口,为什么Cocoa会忽略它并将其更改为其他窗口?有没有更好的方法来做我想要的?
如果所有窗口都在同一屏幕上,则不会发生这种情况。
答案 0 :(得分:0)
通过交换最后两行的顺序来解决这个问题:
[self.previousWindow orderOut:self];
[newWindow makeKeyAndOrderFront:self];
我最初担心在applicationShouldTerminateAfterLastWindowClosed
返回YES
的应用程序中按此顺序执行操作可能会导致应用程序过早关闭,但似乎并非如此。