如何使窗口成为 Cocoa 多窗口应用程序中的活动窗口?
Posted
技术标签:
【中文标题】如何使窗口成为 Cocoa 多窗口应用程序中的活动窗口?【英文标题】:How do I make a window the active window in a Cocoa multi window app? 【发布时间】: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 ...
【参考方案1】:
试试这个
[previousWindow orderBack];
[previousWindow resignKeyWindow];
[newWindow orderFront];
[newWindow makeKeyWindow];
如果窗口有标题栏或调整大小栏,则可以成为关键窗口。
如果您的应用程序窗口没有标题栏或调整窗口大小,那么 它不能成为关键窗口。
【讨论】:
不,那也不行……新窗口有标题栏和调整大小栏,所以那里没有显示停止器。以上是关于如何使窗口成为 Cocoa 多窗口应用程序中的活动窗口?的主要内容,如果未能解决你的问题,请参考以下文章
Cocoa/Objective-C - 带有文本输入的子窗口,而主窗口没有变为非活动状态