【发布时间】:2016-01-04 16:31:42
【问题描述】:
我正在 Xcode 7(用于 OS X 10.11)中使用 Swift 2 编写程序,我希望它(这是 ViewController 类)能够检测用户何时按下功能键,尤其是当应用程序处于在后台。我覆盖了acceptsFirstResponder:
override var acceptsFirstResponder: Bool { return true }
我已经实现了keyUp: 和keyDown::
override func keyDown(theEvent: NSEvent) {
print("keyDown:\n")
let ch: NSString = theEvent.charactersIgnoringModifiers!
if ch.length == 1 {
let char: Int = Int(ch.characterAtIndex(0))
if char == NSF7FunctionKey {
prevSong(NSNull())
}else if char == NSF8FunctionKey {
playPause(NSNull())
}else if char == NSF9FunctionKey {
nextSong(NSNull())
}else{
self.nextResponder?.keyDown(theEvent)
}
}else{
self.nextResponder?.keyDown(theEvent)
}
}
override func keyUp(theEvent: NSEvent) {
print("keyUp:\n")
self.nextResponder?.keyUp(theEvent)
}
我原本拥有 keyUp: 中的所有代码,但我从未将“keyDown:”打印到控制台。另外,如果有人知道检测功能键的更好方法,请说出来。
为什么检测不到按键?
【问题讨论】:
-
你为什么要从你的
keyDown方法中调用keyUp方法? -
代码仍在
keyUp方法中时的错字 -
嗯....所以您发布的代码实际上并不是您正在运行的代码?
-
两者结果相同:按 F7 或 F9 时无效;按 F8 会调出 iTunes。