【问题标题】:How to easily close a NSWindow that is not key?如何轻松关闭不是关键的 NSWindow?
【发布时间】:2012-03-10 02:53:03
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这比我的答案更好,因为它不需要子类化。

标签: cocoa nswindow


【解决方案1】:

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

【讨论】:

  • 呵呵,搜索栏的第一响应者状态是ticket。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 2011-03-05
  • 2012-02-01
  • 2020-02-13
  • 2021-01-16
  • 2011-08-28
  • 1970-01-01
相关资源
最近更新 更多