iOS Swift中断键盘事件

我有问题来拦截键盘事件。 我已将我的iOS与SteelSeries Free(游戏手柄控制器)连接起来,当连接到iOS时将被检测为蓝牙键盘。 这是我打开Notes时testing的,游戏手柄上的任何button都会写一个字母。

我需要拦截这个button,并运行我自己的function,但不幸的是,我无法这样做。

我一直在尝试使用GCController,但显然它不被检测为游戏控制器对象。 当我打印计数,它显示为0.我的代码如下。

let gameControllers = GCController.controllers() as! [GCController] println("configureConnectedGameControllers count: \(gameControllers.count)") 

所以我认为这是因为游戏手柄被检测为蓝牙键盘,这就是为什么它不被检测为游戏控制器。 所以我试图改用UIKeyCommand。 以下是我的代码:

 override func viewDidLoad() { super.viewDidLoad() var keys = [UIKeyCommand]() for digit in "abcdefghijklmnopqrstuvwxyz" { keys.append(UIKeyCommand(input: String(digit), modifierFlags: .Command, action: Selector("keyPressed:"))) keys.append(UIKeyCommand(input: String(digit), modifierFlags: .Control, action: Selector("keyPressed:"))) keys.append(UIKeyCommand(input: String(digit), modifierFlags: nil, action: "pressKey")) } } override func canBecomeFirstResponder() -> Bool { return true } func keyPressed(command: UIKeyCommand) { println("another key is pressed") //never gets called } func pressKey() { println("a key is pressed") } 

但即使有上述的实现,当我按下游戏手柄上的button时,控制台上没有打印任何内容。

这使我困惑。 所以请帮助我,如果你知道这个答案。 提前致谢!

我终于设法得到它的工作。 下面是代码,如果有人需要它。

 var keys = [UIKeyCommand]() override func viewDidLoad() { super.viewDidLoad() //configureGameControllers() for digit in "abcdefghijklmnopqrstuvwxyz" { keys.append(UIKeyCommand(input: String(digit), modifierFlags: nil, action: Selector("keyPressed:"))) } } override func canBecomeFirstResponder() -> Bool { return true } override var keyCommands: [AnyObject]? { get { return keys } } func keyPressed(command: UIKeyCommand) { println("user pressed \(command.input)") }