意想不到的NSWindow成为关键窗口

时间:2015-06-16 04:49:40

标签: objective-c cocoa nswindow keywindow

我的应用程序中有一个带有按钮的主NSWindow。按下按钮时,它会执行以下操作:

NSWindow *newWindow = [NSWindow initWithContentRect:[screen frame] styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
[newWindow makeKeyAndOrderFront:self];
[self.previousWindow orderOut:self];

这大部分时间都可以正常工作,但如果我打开第二个窗口(称为“其他”窗口)并在按下按钮之前在另一个屏幕上,则会发生以下情况:

  1. 我的新窗口已创建,已成为关键,并且已预先订购。
  2. 订购了上一个窗口。
  3. “其他”窗口是关键。
  4. 查看堆栈跟踪,我可以看到,由于发送了一些通知,“其他”窗口正在变为密钥。这不是我的应用程序所以必须是一个Cocoa的东西。鉴于我明确说明哪个窗口应该是关键窗口,为什么Cocoa会忽略它并将其更改为其他窗口?有没有更好的方法来做我想要的?

    如果所有窗口都在同一屏幕上,则不会发生这种情况。

1 个答案:

答案 0 :(得分:0)

通过交换最后两行的顺序来解决这个问题:

[self.previousWindow orderOut:self];
[newWindow makeKeyAndOrderFront:self];

我最初担心在applicationShouldTerminateAfterLastWindowClosed返回YES的应用程序中按此顺序执行操作可能会导致应用程序过早关闭,但似乎并非如此。