使用Swift监听硬件键盘按键事件

3
我希望在我的应用程序中添加硬件键盘支持,使用户可以通过按下键盘上的某个特定键来调用函数。我找到了这篇文章,并且在Objective-C中成功实现了它。我已经将其转换为Swift,但是出现了问题,即在我按下“c”键后,keyPressed方法没有被调用。我确认keyCommands会在用户按下键盘上的任何键时被调用。我正在使用iOS模拟器和Mac的键盘进行测试。
请问,这里在我的Swift代码中有什么问题?
override func canBecomeFirstResponder() -> Bool {
    return true
}

func keyCommands() -> [AnyObject]? {
    var keyCommands = []

    struct Static {
        static var onceToken : dispatch_once_t = 0
    }
    dispatch_once(&Static.onceToken) {
        let command = UIKeyCommand(input: "c", modifierFlags: nil, action: "keyPressed:")
        keyCommands = [command]
    }

    return keyCommands
}

func keyPressed(command: UIKeyCommand) {
    println("user pressed c") //never gets called
}
1个回答

2
问题在于每次按下键时都会调用keyCommands,并且每次初始化数组时都会使其为空,然后返回它。因此,第一次调用该方法时,它将返回正确的数组,但第二次调用时,它将返回没有内容的数组。
为了解决这个问题,我决定将关键命令数组存储为属性,然后在方法中检查它是否为nil,如果是,则创建它,否则只返回存储的属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接