如何打开一个NSWindow并使其被选中和聚焦?

13

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

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

窗口已经成功打开,但是之前的窗口仍然是主窗口并且处于焦点状态。我尝试了以下代码来强制使主窗口获得焦点,但它没有起作用。该窗口仍然具有禁用的标题栏,并且无法接收键盘事件等。

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

我似乎只能通过在调用showWindow:后关闭窗口来使先前的窗口失去焦点,有什么思路吗?


4
不确定为什么我在这里收到了-1,有人可以告诉我如何改进问题吗? - Luke
2个回答

13

makeKeyAndOrderFront: 是更佳的选择。你确定 self.windowwindow 指向同一个对象吗?


谢谢,但它仍然不起作用。我在showWindow:之后直接添加了[window makeKeyAndOrderFront:self];调用,但它仍然不起作用。我应该在其他地方调用它吗? - Luke
makeKeyAndOrderFront: 是正确的方法。你在哪里调用它并不重要。问题可能在于,主窗口可能是模态的,或者有些东西拒绝放弃第一响应者状态。 - Tom Dalling
1
是的,nib文件中存在问题,请查看我的答案以获取解决方案。 - Luke
一旦 nib 正确设置,showWindow: 就可以很好地工作。 - Luke
@TylerA。请看下面的回答。 - Luke

8

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


我想在这里补充一点,我忘记在Interface Builder中将窗口输出连接到我的NSWindow。这导致我的代码无法正常工作,所以对于任何阅读此内容的人,请不要忘记连接窗口输出。这是一个简单的错误,但可能会让你沮丧很长时间哈哈。 - Supertecnoboff
显然这是一个非常古老的答案,但如果有人能将这个句子翻译成一个图像,展示它看起来是什么样子(而不是我认为它应该是什么样子,因为显然是错误的,所以它不起作用),那将会非常有帮助。 - Graham Leggett

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