我在NSPopover中有一个NSSearchField。单击NSStatusBar项时会打开此弹出窗口。
在我的NSPopover视图控制器的viewWillAppear()
中,我在NSSearchField上调用了self.view.window?.makeFirstResponder(searchField)
。我希望在显示弹出框时可以编辑此搜索字段。通过准备编辑,我的意思是用户不必在NSSearchField内部单击以开始输入。
此时,我的实现并不总是有效。有时,它会起作用,并且弹出窗口会在搜索字段准备就绪时打开,光标会闪烁。但是,大多数情况下,特别是当我打开弹出窗口时在不同的应用程序中编辑文本时,必须单击NSSearchField进行编辑。
我已经将搜索字段子类化并覆盖了它的becomeFirstResponder()
方法,我可以确认每次调用它。
当该字段成为第一个响应者时,为什么我不能“窃取”从其他应用程序编辑我的搜索字段的权利?这甚至可能吗?
答案 0 :(得分:0)
您应该使用viewDidAppear:
使搜索字段成为第一响应者。
通常,当调用viewWillAppear:
时,视图尚未位于视图层次结构中,因此window
属性为nil
(并且您的可选链接将不会调用makeFirstResponder
})。
答案 1 :(得分:0)
事实证明,关键是将我的应用程序带到最前沿。
我能够通过调用NSApplication.sharedApplication().activateIgnoringOtherApps(true)
为我的应用程序提供系统的重点。我的NSSearchField已经成为第一个响应者,现在可以直接编辑。