在我的MacOS应用中,工具栏中有一个NSSearchField
。我想让用户通过按CMD+F
来集中注意力(与许多Apple应用程序中的行为相同)。我创建了一个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
不会拒绝第一响应者。
我还尝试使用NSToolbarItem
的{{1}},结果相同。
如何使menuFormRepresentation.view
成为第一响应者?任何帮助表示赞赏!
答案 0 :(得分:-1)
如@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)
}
}