NSWindow未激活

3

我在后台运行的辅助工具中创建了一个窗口(它不是带有 .nibInfo.plist 的应用程序包,而是一个纯可执行文件)。当调用 -makeKeyAndOrderFront: 时,窗口会显示,但它不像活动窗口一样“弹出”。

这个问题能够解决吗?

谢谢, Erik


你是如何让你的应用程序在后台运行的? - Peter Hosey
1个回答

0

您应该将助手工具封装为常规的.app包,并至少包含一个Info.plist文件。然后问题就解决了。在OS X中,GUI应用程序需要有一个Info.plist文件才能正确接收事件。

如果GUI应用程序不在应用程序包中,则其行为方式从未对我来说很清楚。如果我没记错的话,它会随着OS X版本的变化而改变。我认为在以前的OS X版本中,它的表现更糟糕。例如,窗口显示出来了,但我无法在其中单击任何UI。

许多使用跨平台工具包编译程序的人都面临这个问题,例如在 WxWidgets wiki 中这里的讨论。显然,苹果操作系统不会将未打包成.app的程序标记为前台应用程序,这导致了您的问题。您可以使用 TransformProcessType 从未包含在 .app bundle 中的二进制文件来创建一个前台应用程序以解决您的问题,但这不是该功能的文档/预期用法。
所以,只需包装成一个 .app bundle 即可。
更新:

"foreground-able-ness" 受应用的 activationPolicy 控制,参见 NSApplication 的文档。Cocoa with love 的这篇文章中找到了相关信息。


1
但是当我在窗口中点击某个东西(例如,我有一个表视图),它成为第一响应者时,窗口也变得活跃了。 - user187676
我知道激活策略标志,实际上在写这个问题之前我已经尝试过了。但是它似乎对我的问题没有起作用。不过现在我已经将这件事包装到一个应用程序捆绑包中了,所以应该没问题了。 - user187676

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接