如何打开 NSWindow 并选择窗口并获得焦点?

Posted

技术标签:

【中文标题】如何打开 NSWindow 并选择窗口并获得焦点?【英文标题】:How do I open an NSWindow and have the window selected and in focus? 【发布时间】:2010-05-12 10:02:56 【问题描述】:

我正在尝试使用以下代码打开一个 NSWindow:

NSWindowController *window = [[NSWindowController alloc] initWithWindowNibName:@"MainWindow"];
[window showWindow:nil];

窗口可以正常打开,但前一个窗口仍然是主窗口并处于焦点位置。我尝试了以下代码来强制主窗口,但它不起作用。该窗口仍然有一个禁用的标题栏,并且不接受关键事件等。

[self.window makeKeyAndOrderFront:self];
[self.window makeMainWindow];

我似乎能够让前一个窗口失去焦点的唯一方法是如果我在调用 showWindow: with [[NSApp mainWindow] close]; 后关闭窗口;

有什么想法吗?

【问题讨论】:

不知道为什么我在这里收到 -1,有人告诉我如何改进这个问题吗? 【参考方案1】:

makeKeyAndOrderFront: 是要走的路。你确定self.windowwindow 指的是同一个对象吗?

【讨论】:

谢谢,但还是不行。我添加了 [window makeKeyAndOrderFront:self];在 showWindow: 之后直接调用它仍然不起作用。我应该在其他地方调用它吗? makeKeyAndOrderFront: 是正确的方法。你在哪里调用它应该无关紧要。还有别的问题。例如,主窗口可能是模态的,或者某些东西拒绝放弃第一响应者状态。 是的,笔尖有问题,请参阅我的解决方案。 这与 showWindow 一起工作得很好:一旦笔尖设置正确。 @TylerA。请参阅下面的答案【参考方案2】:

我通过将 WindowController 分配给 nib 文件所有者解决了这个问题,而不是在 nib 中使用单独的 NSWindowController 对象。

【讨论】:

我想补充一点,我忘记在 Interface Builder 中将窗口插座连接到我的 NSWindow。这导致代码对我不起作用,所以对于阅读本文的任何人,不要忘记连接窗口插座。一个简单的错误,但会让你沮丧多年,哈哈 显然是一个非常古老的答案,但是如果有人可以将这句话翻译成它的样子(与我认为它应该看起来的相反,这显然是错误的,因为它没有工作),这将是非常有帮助的。

以上是关于如何打开 NSWindow 并选择窗口并获得焦点?的主要内容,如果未能解决你的问题,请参考以下文章

WPF虚拟键盘如何不获得当前焦点

在 Swift 中打开一个关闭的 NSWindow 会导致应用程序崩溃

如何让 OS X 设置 NSWindow 的初始位置

Unity3d user32.dll 拖动窗口并重新获得焦点

如何防止 CWnd 获得焦点?

窗口NSWindow