Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中监听硬件键盘按键_Ios_Swift_Keyboard_Uikeycommand - Fatal编程技术网

Ios 在Swift中监听硬件键盘按键

Ios 在Swift中监听硬件键盘按键,ios,swift,keyboard,uikeycommand,Ios,Swift,Keyboard,Uikeycommand,我想在我的应用程序中添加硬件键盘支持,这样用户可以随时通过按键盘上的某个键来触发要调用的功能。我发现并能够使它在Objective-C中工作得很好。我已将其转换为Swift,但由于某种原因,keyPressed方法在我按下“C”后没有被调用。我确认只要用户按下键盘上的任何键,就会调用keyCommands。我正在用iOS模拟器和Mac的键盘进行测试 我的Swift代码有什么问题 override func canBecomeFirstResponder() -> Bool { re

我想在我的应用程序中添加硬件键盘支持,这样用户可以随时通过按键盘上的某个键来触发要调用的功能。我发现并能够使它在Objective-C中工作得很好。我已将其转换为Swift,但由于某种原因,
keyPressed
方法在我按下“C”后没有被调用。我确认只要用户按下键盘上的任何键,就会调用
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
}

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

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