是否可以在 NSPanel 第一响应者状态中提供 NSView 而不提供 NSPanel 键窗口状态(使主应用程序窗口辞职键)?
谢谢。
是否可以在 NSPanel 第一响应者状态中提供 NSView 而不提供 NSPanel 键窗口状态(使主应用程序窗口辞职键)?
谢谢。
好吧,我最终弄清楚了这一点,但它需要进行大量研究,所以我会在这里发布详细信息,以防其他人遇到同样的问题。首先,一些基础知识:
-isKeyWindow
但这不会给出窗口第一响应者状态中包含的视图。我的场景:
我在主应用程序窗口中添加了一个包含 的子NSTableView
窗口(原因无关紧要)。子窗口是一个NSPanel
with NSBorderlessWindowMask
。我想在NSTableView
不使面板成为关键窗口的情况下赋予第一响应者状态,因为它从主窗口中夺走了焦点(子窗口错觉的全部意义在于使子窗口看起来像是主窗口的一部分) .
isKeyWindow
我尝试的第一件事是通过覆盖返回来欺骗表格视图,使其认为它位于关键窗口内YES
。这使得表格视图绘制得好像它是第一响应者,但仍然没有给它第一响应者状态。
解决方案:
所以默认情况下,NSBorderlessWindowMask 不会让窗口成为键。为了使表格视图成为第一响应者,窗口必须是关键,所以我canBecomeKeyWindow
在无边框窗口子类中覆盖了 return YES
。当然,这会从主窗口中删除关键状态,这是我想要避免的事情之一。为了解决这个问题,我将我的主窗口子类化并覆盖了以下方法:
- (BOOL)isMainWindow
{
return YES;
}
- (BOOL)isKeyWindow
{
return ([NSApp isActive]) ? YES : [super isKeyWindow];
}
这个子类检查应用程序是否处于活动状态,如果是,它总是返回YES
,这样无论你的应用程序中哪个窗口处于活动状态,主窗口总是表现得好像它仍然是键一样。这种方式给人一种错觉,即您可以同时让多个窗口成为关键窗口,并使您能够将关键窗口状态转移到另一个窗口,而不会在主窗口上丢失它。希望这可以帮助!