Как обнаружить события клавиатуры в SwiftUI на macOS? - PullRequest
1 голос
/ 11 апреля 2020

Как я могу обнаружить события клавиатуры в представлении SwiftUI на macOS?

Я хочу иметь возможность использовать нажатия клавиш для управления элементами на определенном экране, но неясно, как я определяю события клавиатуры, что обычно отключается путем переопределения keyDown (_ event: NSEvent) в NSView.

1 Ответ

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

Для этого пока нет встроенного встроенного API SwiftUI.

Вот только возможный демонстрационный подход. Протестировано с Xcode 11.4 / macOS 10.15.4

struct KeyEventHandling: NSViewRepresentable {
    class KeyView: NSView {
        override var acceptsFirstResponder: Bool { true }
        override func keyDown(with event: NSEvent) {
            super.keyDown(with: event)
            print(">> key \(event.charactersIgnoringModifiers ?? "")")
        }
    }

    func makeNSView(context: Context) -> NSView {
        let view = KeyView()
        DispatchQueue.main.async { // wait till next event cycle
            view.window?.makeFirstResponder(view)
        }
        return view
    }

    func updateNSView(_ nsView: NSView, context: Context) {
    }
}

struct TestKeyboardEventHandling: View {
    var body: some View {
        Text("Hello, World!")
            .background(KeyEventHandling())
    }
}

Вывод:

Demo

...