使NSToolbarItem成为第一响应者



在我的MacOS应用程序中,工具栏中有一个NSSearchField。我想让用户通过按下CMD+F(与苹果许多应用程序中使用的行为相同(来集中注意力。我创建了一个NSMenuItem,它的密钥等价于CMD+F——它调用以下函数,该函数应该使NSSearchField成为第一响应者。

@IBAction func focusFilter(_ sender: NSMenuItem) {
self.view.window?.toolbar?.items.first(where: { (item) -> Bool in
return item.itemIdentifier.rawValue == "Search"
})?.view?.becomeFirstResponder()
}

当按下CMD+F时,似乎NSSearchField在很短的时间内成为第一响应者(标题开始向左移动(,但在焦环出现之前它失去了焦点(NSSearchField不会拒绝第一响应者(。

我还尝试使用NSToolbarItemmenuFormRepresentation.view,得到了相同的结果。

如何使NSToolbarItem成为第一响应者?感谢您的帮助!

正如@Willeke所提到的,正确的解决方案不是使用becomeFirstResponder,而是使用NSWindow makeFirstResponder:。它可以很好地使用以下代码:

@IBAction func focusFilter(_ sender: NSMenuItem) {
if let searchItem = self.view.window?.toolbar?.items.first(where: { (item) -> Bool in
return item.itemIdentifier.rawValue == "Search"
}) {
self.view.window?.makeFirstResponder(searchItem.view)
}
}

相关内容

  • 没有找到相关文章

最新更新