意外的 NSWindow 成为关键 window
Unexpected NSWindow becomes key window
我的应用程序中有一个带有按钮的主 NSWindow
。按下按钮时,它会执行以下操作:
NSWindow *newWindow = [NSWindow initWithContentRect:[screen frame] styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
[newWindow makeKeyAndOrderFront:self];
[self.previousWindow orderOut:self];
这在大多数情况下工作正常,但如果我打开了第二个 window(称为 "other" window)并且在我按下按钮之前在另一个屏幕上,发生以下情况:
- 我的新 window 已创建、生成密钥并在前面订购。
- 前面的window已经订完了
- "other" window 成为密钥
查看堆栈跟踪,我可以看到 "other" window 由于发送了一些通知而成为关键。这不在我的应用程序中,所以一定是 Cocoa 的东西。鉴于我明确指出哪个 window 应该是关键 window,为什么 Cocoa 忽略它并将其更改为其他内容?有没有更好的方法来做我想做的事?
如果所有 windows 都在同一屏幕上,则不会发生这种情况。
可以预见,这是通过交换最后两行的顺序解决的:
[self.previousWindow orderOut:self];
[newWindow makeKeyAndOrderFront:self];
我最初担心在 applicationShouldTerminateAfterLastWindowClosed
returns YES
的应用程序中按此顺序执行操作可能会导致应用程序过早关闭,但事实似乎并非如此.
我的应用程序中有一个带有按钮的主 NSWindow
。按下按钮时,它会执行以下操作:
NSWindow *newWindow = [NSWindow initWithContentRect:[screen frame] styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
[newWindow makeKeyAndOrderFront:self];
[self.previousWindow orderOut:self];
这在大多数情况下工作正常,但如果我打开了第二个 window(称为 "other" window)并且在我按下按钮之前在另一个屏幕上,发生以下情况:
- 我的新 window 已创建、生成密钥并在前面订购。
- 前面的window已经订完了
- "other" window 成为密钥
查看堆栈跟踪,我可以看到 "other" window 由于发送了一些通知而成为关键。这不在我的应用程序中,所以一定是 Cocoa 的东西。鉴于我明确指出哪个 window 应该是关键 window,为什么 Cocoa 忽略它并将其更改为其他内容?有没有更好的方法来做我想做的事?
如果所有 windows 都在同一屏幕上,则不会发生这种情况。
可以预见,这是通过交换最后两行的顺序解决的:
[self.previousWindow orderOut:self];
[newWindow makeKeyAndOrderFront:self];
我最初担心在 applicationShouldTerminateAfterLastWindowClosed
returns YES
的应用程序中按此顺序执行操作可能会导致应用程序过早关闭,但事实似乎并非如此.