强制 NSSearchField 在成为第一响应者时开始编辑

Force NSSearchField to Begin Editing When It Becomes First Responder

我在 NSPopover 中有一个 NSSearchField。单击 NSStatusBar 项时会打开此弹出窗口。

在我的 NSPopover 的视图控制器 viewWillAppear() 中,我在我的 NSSearchField 上调用了 self.view.window?.makeFirstResponder(searchField)。我希望此搜索字段在弹出窗口出现时准备好进行编辑。准备好编辑,我的意思是用户不必在 NSSearchField 中单击即可开始输入。

此时,我的实现并不总是有效。有时,它会起作用,弹出窗口会打开,搜索字段准备就绪,光标会闪烁。但是,大多数时候,尤其是当我打开弹出窗口时正在不同的应用程序中编辑文本时,必须单击 NSSearchField 才能进行编辑。

我已经将搜索字段子类化并覆盖了它的 becomeFirstResponder() 方法,我可以确认它每次都会被调用。

为什么我不能 "steal" 在其他应用程序成为第一响应者时编辑我的搜索字段的权利?这甚至可能吗?

您应该使用 viewDidAppear: 使搜索字段成为第一响应者。

通常当调用 viewWillAppear: 时,视图还不在视图层次结构中,因此 window 属性 是 nil(您的可选链接将只是不调用 makeFirstResponder).

事实证明,关键在于将我的应用程序带到最前沿。

我可以通过调用 NSApplication.sharedApplication().activateIgnoringOtherApps(true) 为我的应用程序提供系统焦点。我的NSSearchField,已经成为第一响应者,现在可以直接编辑了