繁体   English   中英

手动使NSPanel / NSWindow退出密钥或不成为密钥

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM