-1

在我的 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's menuFormRepresentation.view,结果相同。

我怎样才能NSToolbarItem成为第一响应者?任何帮助表示赞赏!

4

1 回答 1

-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)
    }
}
于 2018-07-29T14:49:44.400 回答