我有一个位于菜单栏中的应用程序,当您点击该按钮时,它会显示一个NSPopover。
一切正常,但我希望NSSearchField成为第一个响应者,因此用户可以直接在框中输入。
但是,如果该应用尚未被选中,则无法正常工作。虽然看起来搜索框处于活动状态,但键盘输入会转到之前打开的应用程序,因为从技术上讲它仍然是活动窗口。
我已经看过一些关于这类事情的问题,但它们都需要像makekeyandorder这样的objc方法,或者只是不适用于NSPopover的东西。
所以我的问题是 - 是否有一种方法,当按下按钮时,我可以强制应用程序成为活动应用程序?
我有一个疯狂的猜测并尝试NSApplication().sharedApplication().becomeFirstResponder()
,但没有运气。
如果有另一种方法,我完全错过了,请告诉我!
答案 0 :(得分:8)
我最后自己修复了它,结果证明这是一个非常简单的修复方法。
我需要在ViewControllers NSApplication.sharedApplication().activateIgnoringOtherApps(true)
方法中调用viewDidAppear()
。
它修复了一切!
答案 1 :(得分:1)
即使@Christopher_Hannah回答有效,文档也清楚地说明了
您无需发送此消息即可成为应用程序的NSWindows密钥之一。将makeKey()消息发送到NSWindow对象时,请确保它是应用程序处于活动状态时的键窗口。
因此,假设我们在视图控制器中,您要做的就是
override func viewDidAppear() {
super.viewDidAppear()
view.window?.makeKey()
}