我将NSWindow的自定义子类的childWindow添加到parentWindow(也是NSWindow的自定义子类)。 childWindow有NSBorderlessWindowMask和canBecomeKeyWindow:被覆盖以返回YES并且canBecomeMainWindow:返回NO。
childWindow设置为使用parentWindow调整大小。所以我想创建一个错觉,即childWindow的视图是parentWindow的一部分。主要思想是将基于文档的应用程序创建的文档窗口排列在主窗口中,以提供标签界面(就像在浏览器中一样)以在文档之间切换。
我的问题是,每当我点击childWindow的其中一个视图时,parentWindow(主窗口)就会失去焦点,而交通灯按钮会变灰。这显然与我想要达到的目标背道而驰。
我找到了这个答案: Make NSView in NSPanel first responder without key window status
但即使我覆盖isKeyWindow :(主窗口)总是返回YES,但当我点击childWindow时标题栏会变灰。
我也试过遵循这个建议: http://www.cocoabuilder.com/archive/cocoa/143945-non-focused-child-window.html
但我不确定“在其nextResponder之前将响应链包含子窗口”意味着什么。使用canBecomeKeyWindow:返回NO(对于childWindow),子视图中的视图永远不会成为键并且总是变灰。
任何线索我做错了什么?
一个补充:是否可以在不给出childWindow键状态的情况下在childWindow FirstResponder中创建视图?
答案 0 :(得分:0)
我通过模仿NSPopover的行为来完成这项工作。经过调查,我发现一个弹出窗口(使用私有NSPanel子类“ _NSPopoverWindow”)认为它是键和主窗口,即使它不是[NSApp keyWindow]返回的窗口。
创建您自己的自定义NSPanel子类,将其附加到父窗口,然后这样重写以下方法:
- (BOOL)isKeyWindow {
return YES;
}
- (BOOL)isMainWindow {
return YES;
}
- (BOOL)canBecomeKeyWindow {
return YES;
}
- (BOOL)canBecomeMainWindow {
return YES;
}
- (void)makeKeyWindow {
[super makeKeyWindow];
[self.parentWindow makeKeyWindow];
}
- (void)makeMainWindow {
[super makeMainWindow];
[self.parentWindow makeMainWindow];
}
- (void)becomeKeyWindow {
[super becomeKeyWindow];
}
- (void)becomeMainWindow {
[super becomeMainWindow];
[self.parentWindow becomeMainWindow];
}
- (void)resignMainWindow {
}
- (void)resignKeyWindow {
}