gpt4 book ai didi

objective-c - 手动让 NSPanel/NSWindow 退出键或不成为键

转载 作者:行者123 更新时间:2023-12-03 17:38:29 25 4
gpt4 key购买 nike

我正在尝试在 Objective-C/Cocoa/OS X 中创建虚拟键盘。键盘窗口是一个 HUD 面板。如果我点击键盘,如何使面板不成为关键?

我已经在 - (void)windowDidBecomeKey:(NSNotification *)notification-方法(调用 get )中尝试了以下方法,但它不起作用:

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(@"可以成为关键窗口: %hhd", _window.canBecomeKeyWindow) 返回 0,但面板仍然成为关键...

最佳答案

使用 NSPanel 并将其 becomesKeyOnlyIfNeeded 属性设置为 true。您可能还想在面板的样式掩码中使用NSNonactivatingPanelMask

<小时/>

更新:

由于您永远不想让面板成为关键,因此您只需使用覆盖-canBecomeKeyWindow的自定义子类即可返回false:

- (BOOL) canBecomeKeyWindow
{
return NO;
}

关于objective-c - 手动让 NSPanel/NSWindow 退出键或不成为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30004402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com