1

我想为我的 NSWindow 制作一个自定义的自动完成控件,有点像 Xcode 的花哨的控件,但我不知道怎么做。

我用自己的 NSWindowController 制作了一个 NSPanel,并用如下代码显示它:

_popupController = [[MYPopupWindowController alloc] initWithWindowNibName: @"MYPopupPanel"];
NSPanel *popup = [_popupController window];
[popup setFrameTopLeftPoint: ...];  // location of the cursor
[popup setLevel: NSPopUpMenuWindowLevel];
[_window addChildWindow: popup ordered: NSWindowAbove];
[_popupController showWindow: sender];

NSPanel 本身有自己的子类实现-canBecomeKeyWindow(返回 YES),以便弹出窗口中的 NSTableView 可以接收关键事件。

这工作得很好。我唯一遇到的问题是,当我的 NSPanel 是关键窗口时,主应用程序 NSWindow 不是(显然),这会导致红色/黄色/绿色窗口控件变暗。显然,在像 Xcode 这样的程序中,窗口控件不会在您每次开始键入方法名称时变暗。

我在吠叫错误的树吗?NSPanel 是制作自定义弹出控件的错误方法吗?或者是否有某种方法可以使 NSPanel 成为关键窗口,而其父窗口(或其他窗口)不会使其窗口控件变暗?

编辑:有没有办法找出 Xcode 实际使用的是什么,比如它是否是 NSPanel?

4

1 回答 1

1

尝试为NSNonactivatingPanelMask您的样式添加标志NSPanel(如果您使用 xib,只需在属性检查器中设置“非激活”复选框)。

于 2014-01-13T12:51:00.073 回答