我需要产生一个将在 cocoa 应用程序中的主窗口上方悬停的窗口。我希望该主窗口允许用户在输入框中输入一些文本。在文本输入框真正获得焦点之前,一切都很好。主窗口变为“已禁用”。这个窗口是无边界的,并且是一个稍微自定义的形状-我想它更像是一个悬停卡。
基本上,我希望此功能几乎像Spotlight(Apple + Space)一样工作-您可以输入文本,但这是一个辅助操作,在更大的UX上下文中,您不希望受到刺激主窗口的效果变灰(变为非事件状态)。您会注意到当您打开某些应用程序并将其聚焦时,聚光灯不会使该应用程序的窗口变为非事件状态。
出现此问题的原因是,文本输入似乎要求子窗口成为键窗口(它不允许您将光标放在文本输入字段中)。当它成为键时,主窗口将变为非事件状态。
到目前为止,我已经尝试过:
有人对Cocoa/OSX向导有任何想法吗?我已经迷上了这个。我无法挠痒。
编辑:也尝试覆盖子窗口上的以下内容。单击后,该窗口将使主应用程序窗口变为非事件状态。
- (BOOL)canBecomeKeyWindow {
return YES;
}
- (BOOL)canBecomeMainWindow {
return NO;
}
编辑2:
与NSMenu纠缠了一段时间之后,我放弃了这种方法。看来我发现了一些东西。在NSPanel中,有一个窗口样式 mask ,称为:
NSNonactivatingPanelMask
The panel can receive keyboard input without activating the owning application.
Valid only for an instance of NSPanel or its subclasses; not valid for a window.
现在尝试一下...
编辑3:NSNonactivatingPanelMask不能解决问题。没主意
最佳答案
您想要的是一个可以成为key window但不能成为main window的窗口。您可以自己实现这样的类,但这基本上是NSPanel的目的,因此您可以首先尝试。
关于Cocoa/Objective-C-带有文本输入的子窗口,而主窗口不处于事件状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2940091/