NSMENUITEM不用WKWebView接收keyequivalentModifiermask控件

发布于 2025-02-01 19:02:06 字数 759 浏览 6 评论 0原文

nsapplication.mainmenu带有2 nsmenuitem和以下key equivalent

  • (控件选项卡)
keyEquivalent = String(utf16CodeUnits: [unichar(NSTabCharacter)]
keyEquivalentModifierMask = NSEvent.ModifierFlags.control
  • ⌃ >(控制移位选项卡)
keyEquivalent = String(utf16CodeUnits: [unichar(NSTabCharacter)]
keyEquivalentModifierMask = [NSEvent.ModifierFlags.control, NSEvent.ModifierFlags.shift]

他们与任何nsview一起工作,除了wkwebview和任何其他key equivalent组合工作。

显然,菜单项未接收事件,因为即使密钥同等标准不进行直接单击该项目也可以按预期工作。

如何使其工作?

NSApplication.mainMenu with 2 NSMenuItem and the following keyEquivalent:

  • ⌃ ⇥ (Control Tab)
keyEquivalent = String(utf16CodeUnits: [unichar(NSTabCharacter)]
keyEquivalentModifierMask = NSEvent.ModifierFlags.control
  • ⌃ ⇧ ⇥ (Control Shift Tab)
keyEquivalent = String(utf16CodeUnits: [unichar(NSTabCharacter)]
keyEquivalentModifierMask = [NSEvent.ModifierFlags.control, NSEvent.ModifierFlags.shift]

They work as expected with any NSView except with a WKWebView and any other keyEquivalent combination work.

Apparently the menu item is not receiving the event, as clicking directly on the item works as expected too, even if the key equivalent didn't.

How to make it work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

メ斷腸人バ 2025-02-08 19:02:06

看起来像wkwebview intercepts > ⌃⇥ 而无需将它们传递给nsreponder链,就像它一样其他一些命令。

这些命令使用nswindow的选择器:

解决方案是子类wkwebview并实现这些选择器。

例子:

final class WebView: WKWebView {
    @objc func selectNextKeyView(_ sender: Any?) {
        // implement Control Tab
    }
    
    @objc func selectPreviousKeyView(_ sender: Any?) {
        // implement Control Shift Tab
    }
}

Seems like WKWebView intercepts ⌃ ⇥ and ⌃ ⇧ ⇥ without passing them down the NSReponder chain, like it does with some other commands.

These commands use the selectors from NSWindow:

The solution is to subclass WKWebView and implement those selectors.

Example:

final class WebView: WKWebView {
    @objc func selectNextKeyView(_ sender: Any?) {
        // implement Control Tab
    }
    
    @objc func selectPreviousKeyView(_ sender: Any?) {
        // implement Control Shift Tab
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文