【问题标题】:Unexpected NSWindow becomes key window意外的 NSWindow 成为关键窗口
【发布时间】:2015-06-17 05:27:16
【问题描述】:

我的应用程序中有一个主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 会忽略它并将其更改为其他内容?有没有更好的方法来做我想做的事?

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

【问题讨论】:

    标签: objective-c cocoa nswindow keywindow


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多