Отключить звук WKWebView "funk" при нажатии клавиш, но разрешить вводить поля ввода - PullRequest
1 голос
/ 22 апреля 2020

У меня в приложении есть WKWebView, который содержит элементы ввода и текстовые области. Также он поддерживает некоторые ключевые события, скажем, AB C. Когда я нажимаю эти клавиши, не фокусируя элемент ввода, я слышу системный звук в стиле macos - WebApp также запускает команду клавишей.

Когда я пытаюсь отключить звук фанка, используя localMonitor в Swift и «ловить» нажатия клавиш на этих клавишах, они больше не «фанк», но также не работают при наборе в полях ввода или текстовые. Таким образом, они были полностью отключены.

Как я могу предотвратить звук фанка (может быть, полностью для всех нажатий клавиш), но также использовать эти клавиши (все клавиши) в моем веб-представлении?

Вот что я протестировали:

   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
    }

1 Ответ

0 голосов
/ 24 апреля 2020

Вы пробовали только обычный 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)
    }
}
...