我想为我的 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?