0

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

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

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

  1. 我的新窗口已创建,设置为键,并在前面排序。
  2. 前一个窗口已排序。
  3. “其他”窗口成为关键。

查看堆栈跟踪,我可以看到由于发送了一些通知,“其他”窗口正在成为关键。这不在我的应用程序中,所以必须是 Cocoa 的东西。鉴于我明确地说哪个窗口应该是关键窗口,为什么 Cocoa 会忽略它并将其更改为其他窗口?有没有更好的方法来做我想做的事?

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

4

1 回答 1

0

可以预见的是,通过交换最后两行的顺序可以解决此问题:

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

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

于 2015-06-16T21:27:16.453 回答