2012-03-10 73 views
2

我正在实现一个浮动在NSSearchField下的子无边界搜索结果窗口,并在用户键入时显示搜索结果。 NSWindow并不需要是关键因素,因为NSSearchField会将适当的命令(向上箭头,向下箭头,输入键)转发到窗口中的自定义搜索结果视图,让用户在搜索过程中随时浏览搜索结果。除了一个用例外,这一切都很好:我想在用户点击应用程序中的其他任何地方时轻松关闭窗口。如何轻松关闭不是关键的NSWindow?

我通常会在windowDidResignKey通知中这样做,但在这种情况下不会发送,因为窗口永远不是关键。有其他方法可以轻松处理这种情况吗?

- 编辑与解决方案 -

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

+0

这是比我的答案更好的解决方案,因为它不需要子类化。 – 2012-03-10 23:28:58

回答

1

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

+0

呵呵,搜索字段的第一个响应者状态是票。谢谢! – 2012-03-10 13:42:07