【问题标题】:How do I open an NSWindow and have the window selected and in focus?如何打开 NSWindow 并选择窗口并获得焦点?
【发布时间】: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,有人告诉我如何改进这个问题吗?

标签: objective-c cocoa macos nswindow nswindowcontroller


【解决方案1】:

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

【讨论】:

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

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

【讨论】:

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