如何轻松关闭不是关键的NSWindow?

时间:2012-03-10 02:53:03

标签: cocoa nswindow

我正在实现一个子无边界搜索结果窗口,该窗口浮动在NSSearchField下,并在用户输入时显示搜索结果。 NSWindow不需要是密钥,因为NSSearchField会将适当的命令(向上箭头,向下箭头,输入密钥)转发到窗口中的自定义搜索结果视图,这样用户可以在搜索过程中随时浏览结果。除了一个用例之外,这一切都很有效:当用户点击应用程序中的任何其他位置时,我希望轻松关闭窗口。

我通常会在windowDidResignKey通知中执行此操作,但在这种情况下不会发送,因为窗口永远不会是密钥。还有另一种方法可以轻松应对这种情况吗?

- 使用解决方案进行修改 -

使用下面Rob的想法的变化,我简单地实现了controlTextDidEndEditing:,一种NSSearchField的委托方法,当搜索字段失去焦点时,该方法被调用(在其他时间)。如果搜索字段不是我的主父窗口的第一响应者,则关闭搜索结果窗口。

1 个答案:

答案 0 :(得分:1)

您可以继承NSWindow并覆盖makeFirstResponder:,以便第一个响应者更改时,如果结果窗口打开,结果窗口将关闭。当您的搜索字段处于活动状态时,第一个响应者不应该更改,因此只有在搜索字段的字段编辑器失去焦点时才应关闭该窗口。