首页 > 解决方案 > NSApplication 在应用程序开关上制作窗口前面

问题描述

运行我的应用程序(OSX,macOS SDK 10.15)时,它按预期显示主窗口。然后我 CMD-Tab 到另一个应用程序,但是当我 CMD-Tab 回到我的应用程序时,它不会显示窗口。如果我在扩展坞中单击它,也会发生同样的情况。我尝试了各种建议,例如:

[NSApp activateIgnoringOtherApps:YES];
[window makeKeyAndOrderFront:nil];
[window orderFrontRegardless];

[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(applicationSwitchedTo) name:NSWorkspaceDidActivateApplicationNotification object:nil];

-(void)applicationSwitchedTo
{
    [window makeKeyAndOrderFront:nil];
}

我已经在窗口和应用程序委托中设置了所有回调方法,但是当我切换到或从我的应用程序切换时,除了上述回调之外,我什么也没得到。我认为从另一个应用程序切换到应用程序主窗口时显示应用程序主窗口的默认行为。任何帮助是极大的赞赏!

标签: macosappkitnsapplication

解决方案


我想出了一个解决办法,但我不确定这是否是正确的做法。我注意到如果我打电话

[NSApp finishLaunching]

那么窗口排序功能不起作用。我不需要它的功能,所以我删除了它。此外,我现在正在处理事件类型 NSEventTypeAppKitDefined,它会在您打开和关闭应用程序时调用。然后我检查子类型并调用窗口排序函数:

case NSEventTypeAppKitDefined:
{
     if([theEvent subtype] == NSEventSubtypeApplicationActivated) {
          [window makeKeyAndOrderFront:nil];
     }
}

希望这可以帮助某人!


推荐阅读