我正在实现一个子无边界搜索结果窗口,该窗口浮动在NSSearchField下,并在用户输入时显示搜索结果。 NSWindow不需要是密钥,因为NSSearchField会将适当的命令(向上箭头,向下箭头,输入密钥)转发到窗口中的自定义搜索结果视图,这样用户可以在搜索过程中随时浏览结果。除了一个用例之外,这一切都很有效:当用户点击应用程序中的任何其他位置时,我希望轻松关闭窗口。
我通常会在windowDidResignKey
通知中执行此操作,但在这种情况下不会发送,因为窗口永远不会是密钥。还有另一种方法可以轻松应对这种情况吗?
- 使用解决方案进行修改 -
使用下面Rob的想法的变化,我简单地实现了controlTextDidEndEditing:
,一种NSSearchField的委托方法,当搜索字段失去焦点时,该方法被调用(在其他时间)。如果搜索字段不是我的主父窗口的第一响应者,则关闭搜索结果窗口。
答案 0 :(得分:1)
您可以继承NSWindow
并覆盖makeFirstResponder:
,以便第一个响应者更改时,如果结果窗口打开,结果窗口将关闭。当您的搜索字段处于活动状态时,第一个响应者不应该更改,因此只有在搜索字段的字段编辑器失去焦点时才应关闭该窗口。