cocoa - 如何在 Cocoa 多窗口应用程序中使窗口成为事件窗口?

标签 cocoa multi-window

我有一个多窗口 Cocoa 应用程序,使用之前 question 的答案中描述的技术来实现。 .

一切正常,但是在初始窗口出现后打开的窗口显示在前面,但它们的状态不是事件的(一切都是灰色的)。我必须在其框架内显式单击才能使它们成为事件窗口。

到目前为止我的支票:

  • 我已经尝试过 makeKeyAndOrderFront: 但这没有任何区别。
  • NIB 中的文件所有者设置为窗口对应的 Controller 类。
  • 我可以在调试器中看到每个 Controller 的实例实际上是相应窗口的所有者。
  • NSThread建议的解决方案不会使window键窗口。
  • 虽然窗口是 NSWindow 的实例,但 canBecomeKeyWindow 方法返回 NO
  • 该窗口有一个标题栏并且可以调整大小。

我需要做什么才能显示处于事件状态的后续窗口?

编辑:

我使用 SecondaryWindow 子类化 NSWindow 并重写 canBecomeKeyWindow 以返回 YES。我更改为 XIB 以使用新创建的 NSWindow 子类。使用调试器单步执行代码,但该窗口仍然没有成为关键窗口。

最佳答案

试试这个

[previousWindow orderBack];
[previousWindow resignKeyWindow];
[newWindow orderFront];
[newWindow makeKeyWindow];
  • 如果窗口有标题栏或调整大小栏,则它可以成为关键窗口。

如果您的应用程序窗口没有标题栏或调整窗口大小,则 它不能成为关键窗口。

关于cocoa - 如何在 Cocoa 多窗口应用程序中使窗口成为事件窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734126/

相关文章:

c++ - SDL2 : two displays, 两个窗口和全屏模式

android - android N 中的多窗口拖放

Objective-C 和 ASIHTTPRequest 返回值

java - 如何通过调用方法更新 JFrame 内容 Pane ?

objective-c - 如何在 Cocoa 中获取 NSArray 的第一个 x 元素?

objective-c - "Expected a type"错误指向方法的返回类型

android - 支持多窗口应用程序开发

java - Java Web 项目上的多窗口

objective-c - 为轮廓 View 的根行指定不同的背景颜色

macos - 如何设置 NSTableView 中显示为行的 View 的宽度?