【问题标题】:How do I make a window the active window in a Cocoa multi window app?如何使窗口成为 Cocoa 多窗口应用程序中的活动窗口?
【发布时间】:2011-10-12 00:45:30
【问题描述】:

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

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

到目前为止我的支票:

  • 我试过makeKeyAndOrderFront:,但这并没有什么不同。
  • NIB 中的文件所有者设置为窗口对应的控制器类。
  • 在Debugger中可以看到每个控制器的实例其实就是对应窗口的所有者。
  • NSThread 建议的解决方案不使window 键窗口化。
  • canBecomeKeyWindow 方法返回 NO,尽管窗口是 NSWindow 的一个实例。
  • 窗口有一个标题栏并且可以调整大小。

我需要怎么做才能显示处于活动状态的后续窗口?

编辑:

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

【问题讨论】:

  • canBecomeKeyWindow 是否返回 YES?
  • 嗯.. 不,它返回 NO。我仔细检查了 XIB 文件,根据 IB,窗口是 NSWindow 的一个实例,根据文档默认实现应该返回 YES ...

标签: cocoa multi-window


【解决方案1】:

试试这个

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

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

【讨论】:

  • 不,那也不行……新窗口有标题栏和调整大小栏,所以那里没有显示停止器。
猜你喜欢
  • 1970-01-01
  • 2018-10-06
  • 2011-10-10
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
相关资源
最近更新 更多