Я хочу реализовать некоторые действия клавиатуры в моем собственном представлении.Фактический код более сложный, но даже в этой простой настройке я не могу заставить его работать.
Код ниже - Swift 4 в Xcode 9.2 Playground.Если вы включите интерактивный просмотр, то должен быть нарисован прямоугольник размером 500x500 пикселей.
class MyView: NSView {
override open func draw(_ rect: CGRect) {
let context = NSGraphicsContext.current!.cgContext
context.stroke(rect)
}
override open func keyDown(with event: NSEvent) {
print("Key pressed, Code: \(event.keyCode)")
}
/*
override open func performKeyEquivalent(with event: NSEvent) -> Bool {
print("Key pressed, Code: \(event.keyCode)")
return true
}
*/
override open func mouseUp(with event: NSEvent) {
print("Mouse clicked.")
}
}
let myView = MyView(frame: CGRect(origin: .zero, size: CGSize(width: 500, height: 500)))
PlaygroundPage.current.liveView = myView
При обнаружении щелчка мыши в прямоугольнике, keyDown - нет.Однако, когда вы раскомментируете функцию performKeyEquivalent
, это работает.
Я потратил целый день на исследования, прочитал яблочную документацию по обработке ключевых событий и цепочку респондента и прочитал несколько статей по SO, нодо сих пор не знаю, почему мой код не работает.