[英]Make NSPanel/NSWindow resign key manually or not becoming key
我正在尝试在Objective-C / Cocoa / OS X中创建虚拟键盘。键盘窗口是HUD面板。 如果我单击键盘,如何使面板不成为键?
我已经在- (void)windowDidBecomeKey:(NSNotification *)notification
-method(被称为)中尝试了以下方法,但是它不起作用:
NSDisableScreenUpdates();
[_window orderOut:self];
[_window orderFront:self]; // Not asking it to be key
NSEnableScreenUpdates();
并且用nil
代替self
也是一样。 有任何想法吗?
编辑1:我试图设置像这样的属性,这可以但破坏了HUD样式:
[_window setStyleMask:NSHUDWindowMask | NSNonactivatingPanelMask];
如果执行此操作,则将再次出现HUD样式,但窗口也会再次成为关键:
[_window setStyleMask:NSHUDWindowMask | NSTitledWindowMask | NSNonactivatingPanelMask];
编辑2:现在我也尝试了子类化,并将以下代码添加到KeyboardPanel.m:
- (BOOL)canBecomeKeyWindow {
return NO;
}
现在NSLog(@"Can become key window: %hhd", _window.canBecomeKeyWindow)
返回0
,但是面板仍然变为键...
使用一个NSPanel
并将其设置为becomesKeyOnlyIfNeeded
属性为true。 您可能NSNonactivatingPanelMask
在面板的样式蒙版中使用NSNonactivatingPanelMask
。
更新:
由于您永远不想让面板成为键,因此您可以简单地使用覆盖-canBecomeKeyWindow
的自定义子类来返回false:
- (BOOL) canBecomeKeyWindow
{
return NO;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.