【问题标题】:Disable WKWebView "funk" sound on keydown but allow typing input fields在 keydown 上禁用 WKWebView “funk”声音,但允许输入输入字段
【发布时间】:2020-04-22 19:37:40
【问题描述】:

我的应用程序中有一个 WKWebView,其中包含输入元素和文本区域。它还支持一些按键事件,比如 A B C。当我按下这些键而不聚焦输入元素时,我可以听到 macOS 的放克系统声音——WebApp 也会通过按键触发命令。

当我尝试在 Swift 中使用 localMonitor 禁用放克声音并“捕捉”这些键上的按键时,它们不再“放克”,但在输入字段或文本区域时它们也不起作用。所以他们完全被禁用了。

我怎样才能防止放克声音(可能完全适用于所有按键),同时在我的网页视图中使用这些按键(所有按键)?

这是我测试过的:

   override func viewDidLoad() {
      super.viewDidLoad()
      // ...
      NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
         if self. keyDownPressed(with: $0) {
            return nil
         } else {
            return $0
         }
      }
   }


    func keyDownPressed(with event: NSEvent) -> Bool {

        print("caught a key down: \(event.keyCode)")

        if event.keyCode == 48 { return true }
        if event.keyCode == 34 { return true }
        if event.keyCode == 38 { return true }
        if event.keyCode == 40 { return true }
        if event.keyCode == 4 { return true }
        if event.keyCode == 1 { return true }
        if event.keyCode == 3 { return true }
        if event.keyCode == 32 { return true }

        return false
    }

【问题讨论】:

    标签: swift macos webview wkwebview first-responder


    【解决方案1】:

    您是否只尝试过普通的keyDown?输入字段应该仍然可以正常工作。

    override func keyDown(with event: NSEvent) {
        if [48, 34, 40, 4, 1, 3, 32].contains(event.keyCode) {
            // no funk
        } else {
            super.keyDown(with: event)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 2019-10-17
      • 1970-01-01
      相关资源
      最近更新 更多