In my MacOS app, there is an NSSearchField
in the Toolbar. I want to enable users to focus it by pressing CMD+F
(the same behavior that is used in many of Apple’s apps). I created an NSMenuItem
with a key equivalent of CMD+F
– it calls the following function, which is supposed to make the NSSearchField
first responder.
@IBAction func focusFilter(_ sender: NSMenuItem) {
self.view.window?.toolbar?.items.first(where: { (item) -> Bool in
return item.itemIdentifier.rawValue == "Search"
})?.view?.becomeFirstResponder()
}
When pressing CMD+F
it seems as if the NSSearchField
becomes the first responder for a very short time (the title starts moving to the left), but then it loses focus before the Focus Ring appears (the NSSearchField
does not refuse first responder).
I also tried using the NSToolbarItem
’s menuFormRepresentation.view
, with the same result.
How can I make an NSToolbarItem
become first responder? Any help is appreciated!
As mentioned by @Willeke, the right solution is not the use
becomeFirstResponder
, but to useNSWindow makeFirstResponder:
instead. It works fine with this code: