【发布时间】:2014-01-13 20:51:00
【问题描述】:
我想为我的 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?
【问题讨论】:
标签: cocoa popup nswindow nspanel