在Swift中听硬件键盘按键

时间:2014-12-06 07:57:59

标签: ios swift keyboard uikeycommand

我想为我的应用添加硬件键盘支持,以便用户可以随时按键盘上的某个键来触发调用功能。我发现this article并且能够在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 个答案:

答案 0 :(得分:2)

问题是每次按下一个键时调用keyCommands,每次初始化一个数组使其为空时,我都会返回它。因此,第一次调用该方法时,它将返回正确的数组,但第二次返回没有内容的数组。

为了解决这个问题,我决定将关键命令数组存储为属性,然后在方法中检查它是否为nil,如果是,那么我创建它,否则我只返回存储的属性