如何打开 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.window
和window
指的是同一个对象吗?
【讨论】:
谢谢,但还是不行。我添加了 [window makeKeyAndOrderFront:self];在 showWindow: 之后直接调用它仍然不起作用。我应该在其他地方调用它吗?makeKeyAndOrderFront:
是正确的方法。你在哪里调用它应该无关紧要。还有别的问题。例如,主窗口可能是模态的,或者某些东西拒绝放弃第一响应者状态。
是的,笔尖有问题,请参阅我的解决方案。
这与 showWindow 一起工作得很好:一旦笔尖设置正确。
@TylerA。请参阅下面的答案【参考方案2】:
我通过将 WindowController 分配给 nib 文件所有者解决了这个问题,而不是在 nib 中使用单独的 NSWindowController 对象。
【讨论】:
我想补充一点,我忘记在 Interface Builder 中将窗口插座连接到我的 NSWindow。这导致代码对我不起作用,所以对于阅读本文的任何人,不要忘记连接窗口插座。一个简单的错误,但会让你沮丧多年,哈哈 显然是一个非常古老的答案,但是如果有人可以将这句话翻译成它的样子(与我认为它应该看起来的相反,这显然是错误的,因为它没有工作),这将是非常有帮助的。以上是关于如何打开 NSWindow 并选择窗口并获得焦点?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中打开一个关闭的 NSWindow 会导致应用程序崩溃