NSWindow makeKeyAndOrderFront使窗口显示,但不显示Key或Front

时间:2011-09-18 07:22:05

标签: objective-c macos cocoa

makeKeyAndOrderFront没有使我的NSWindow钥匙或前线。

我的应用没有主窗口或菜单栏,这可能是问题的一部分?

IBOutlet NSWindow *loginWindow;
//(connected in Interface Builder to the NSWindow)

NSWindow“在发布时可见”和“关闭后释放”都未经检查。

然后:

- (void) applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [loginWindow makeKeyAndOrderFront:self];
}

打开窗口。 (注释掉它导致没有窗口被打开)。

然而:

  • 它出现在Xcode窗口后面(不是前面)。

  • 它似乎可以接收鼠标焦点,但不会在窗口包含的文本字段中显示按键。按键被发送到Xcode。

  • 激活Expose时,它将显示在Expose网格中。但我无法点击窗口在Expose中选择它...它不会出现在前面。

为什么我的窗口不起作用?

3 个答案:

答案 0 :(得分:30)

尝试调用此方法[NSApp activateIgnoringOtherApps:YES];。这应该使它成为活跃的应用程序。

答案 1 :(得分:25)

在黑暗中刺:您在Info.plist中设置了LSBackgroundOnly。这就是使它不起作用的原因:只有后台的应用程序无法到达前台,这就是为什么你的窗口没有到达前台。

如果您希望自己的应用无法显示在Dock中,请设置LSUIElement。这会抑制应用程序的Dock磁贴,并防止它在菜单栏中显示自己的主菜单,但保留了将窗口放在最前面并使其成为密钥的能力。

答案 2 :(得分:1)

这两个答案都是正确的。如果它是无边界的,你还需要确保覆盖窗口子类中的canBecomeKey

这需要永远弄明白。 (我写了一篇关于我整个解决方案的blog post。)