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

时间:2015-12-03 07:27:20

标签: swift macos nstextfield first-responder nspopover

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

在我的NSPopover视图控制器的viewWillAppear()中,我在NSSearchField上调用了self.view.window?.makeFirstResponder(searchField)。我希望在显示弹出框时可以编辑此搜索字段。通过准备编辑,我的意思是用户不必在NSSearchField内部单击以开始输入。

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

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

当该字段成为第一个响应者时,为什么我不能“窃取”从其他应用程序编辑我的搜索字段的权利?这甚至可能吗?

2 个答案:

答案 0 :(得分:0)

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

通常,当调用viewWillAppear:时,视图尚未位于视图层次结构中,因此window属性为nil(并且您的可选链接将不会调用makeFirstResponder })。

答案 1 :(得分:0)

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

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