我想在自定义视图中实现一些键盘操作。实际的代码更加复杂,即使在这种简单设置下,我仍然无法正常工作。
下面的代码是Xcode 9.2 Playground中的Swift 4。如果打开实时视图,应绘制一个500x500px的矩形。
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的文章,但仍然不知道为什么我的代码无法正常工作。