tun*_*ten 5 cocoa focus childwindow nswindow nsresponder
我将NSWindow的自定义子类的childWindow添加到parentWindow(也是NSWindow的自定义子类).childWindow有NSBorderlessWindowMask和canBecomeKeyWindow:被重写以返回YES并且canBecomeMainWindow:返回NO.
childWindow设置为使用parentWindow调整大小.所以我想创建一个错觉,即childWindow的视图是parentWindow的一部分.主要思想是将基于文档的应用程序创建的文档窗口排列在主窗口中,以提供标签界面(就像在浏览器中一样)以在文档之间切换.
我的问题是每当我点击childWindow的一个视图时,parentWindow(主窗口)失去焦点,交通灯按钮变灰.这显然与我想要达到的目标背道而驰.
我找到了这个答案: 在没有关键窗口状态的NSPanel第一响应者中创建NSView
但即使我重写isKeyWindow :(主窗口)总是返回YES,但是当我点击childWindow时,标题栏会变灰.
我也尝试遵循这个建议:http: //www.cocoabuilder.com/archive/cocoa/143945-non-focused-child-window.html
但我不确定"在其nextResponder之前的响应链中包含子窗口"是什么意思.使用canBecomeKeyWindow:返回NO(对于childWindow),子节点内的视图永远不会成为键并且始终显示为灰色.
我有什么问题吗?
一个补充:是否可以在不给出childWindow键状态的情况下在childWindow FirstResponder中创建视图?
I got this working by mimicking the behaviour of NSPopover. On investigation I found that a popover (which uses a private NSPanel subclass "_NSPopoverWindow") believed it was the key & main window, even though it is not the window returned from [NSApp keyWindow].
Create your own custom NSPanel subclass, attach it to the parent window, and then override the following methods as so:
- (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 {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1488 次 |
| 最近记录: |