如何在单击菜单按钮时激活菜单栏(NSPopover)应用程序?

时间:2016-06-15 23:28:43

标签: swift macos nsmenuitem nspopover

我有一个位于菜单栏中的应用程序,当您点击该按钮时,它会显示一个NSPopover。

一切正常,但我希望NSSearchField成为第一个响应者,因此用户可以直接在框中输入。

但是,如果该应用尚未被选中,则无法正常工作。虽然看起来搜索框处于活动状态,但键盘输入会转到之前打开的应用程序,因为从技术上讲它仍然是活动窗口。

我已经看过一些关于这类事情的问题,但它们都需要像makekeyandorder这样的objc方法,或者只是不适用于NSPopover的东西。

所以我的问题是 - 是否有一种方法,当按下按钮时,我可以强制应用程序成为活动应用程序?

我有一个疯狂的猜测并尝试NSApplication().sharedApplication().becomeFirstResponder(),但没有运气。

如果有另一种方法,我完全错过了,请告诉我!

2 个答案:

答案 0 :(得分:8)

我最后自己修复了它,结果证明这是一个非常简单的修复方法。

我需要在ViewControllers NSApplication.sharedApplication().activateIgnoringOtherApps(true)方法中调用viewDidAppear()

它修复了一切

答案 1 :(得分:1)

即使@Christopher_Hannah回答有效,文档也清楚地说明了

您无需发送此消息即可成为应用程序的NSWindows密钥之一。将makeKey()消息发送到NSWindow对象时,请确保它是应用程序处于活动状态时的键窗口。

因此,假设我们在视图控制器中,您要做的就是

override func viewDidAppear() {
    super.viewDidAppear()

    view.window?.makeKey()
}
相关问题