Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 如何轻松关闭非关键窗口?_Cocoa_Nswindow - Fatal编程技术网

Cocoa 如何轻松关闭非关键窗口?

Cocoa 如何轻松关闭非关键窗口?,cocoa,nswindow,Cocoa,Nswindow,我正在实现一个无边框的子搜索结果窗口,该窗口浮动在NSSearchField下,并在用户键入时显示搜索结果。NSWindow不需要是键,因为NSSearchField将适当的命令(向上箭头、向下箭头、enter键)转发到窗口中的自定义搜索结果视图,用户可以在搜索过程中随时浏览结果。除了一个用例外,这一切都非常有效:当用户单击应用程序中的任何其他位置时,我想轻松关闭窗口 我通常会在windowDidResignKey通知中执行此操作,但在这种情况下不会发送此消息,因为窗口从来都不是键。有没有其他方

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

我通常会在
windowDidResignKey
通知中执行此操作,但在这种情况下不会发送此消息,因为窗口从来都不是键。有没有其他方法可以轻松处理这种情况

--使用解决方案编辑--


使用Rob下面想法的一个变体,我简单地实现了
ControlTextDiEndEditing:
,这是NSSearchField的一个委托方法,在搜索字段失去焦点时调用它。如果搜索字段不是我的主父窗口的第一响应者,我将关闭搜索结果窗口

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

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

Oh duh,搜索字段的第一响应者状态为票证。谢谢哦,对了,搜索区域的第一响应者状态是票证。谢谢这是一个比我的答案更好的解决方案,因为它不需要子类化。这是一个比我的答案更好的解决方案,因为它不需要子类化。