Лучшая стратегия в Swift для обнаружения ввода с клавиатуры в NSViewController

Я хочу обнаружить ввод с клавиатуры в моем NSViewController. Идея состоит в том, чтобы выполнять несколько действий, если пользователь нажимает определенные клавиши, а затем ENTER/RETURN.

Я проверил, будет ли keyDown подходящим способом. Но я бы получал событие каждый раз, когда пользователь нажимал клавишу.

У меня также есть, хотя при использовании NSTextField, установить его скрытым и позволить ему иметь фокус. Но, возможно, есть другое лучшее решение.

Есть идеи?

Спасибо


person Oliver Koehler    schedule 02.09.2017    source источник


Ответы (1)


Наконец-то у меня есть решение, которое мне нравится. Во-первых, он не имеет ничего общего с какими-либо скрытыми элементами пользовательского интерфейса, а позволяет контроллеру представления обнаруживать ввод с клавиатуры.

var monitor: Any?
var text = ""
override func viewDidLoad() {
    super.viewDidLoad()
    self.monitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: myKeyDownEvent)
}

override func viewWillDisappear() {
    //Clean up in case your ViewController can be closed an reopened
    if let monitor = self.monitor {
        NSEvent.removeMonitor(monitor)
    }
}

// Detect each keyboard event
func myKeyDownEvent(event: NSEvent) -> NSEvent {
    // keyCode 36 is for detect RETURN/ENTER
    if event.keyCode == 36 {
       print(text)
       text = ""
    } else {
       text.append( event.characters! )
    }
    return event
}
person Oliver Koehler    schedule 05.09.2017