iOS Swift中断键盘事件

Cod*_*ird 4 keyboard ios gamecontroller swift uikeycommand

我在拦截键盘事件时遇到问题。我已经将我的iOS与SteelSeries Free(游戏手柄控制器)相连,当连接到iOS时,它将被检测为蓝牙键盘。当我打开Notes时进行了测试,按下游戏手柄中的任何按钮都会写一个字母。

我需要拦截此按钮的按下并运行自己的功能,但不幸的是我无法这样做。

我一直在尝试使用GCController,但显然未将其检测为Game Controller对象。当我打印计数时,它显示为0。下面是我的代码。

let gameControllers = GCController.controllers() as! [GCController]
println("configureConnectedGameControllers count: \(gameControllers.count)")
Run Code Online (Sandbox Code Playgroud)

因此,我认为这是因为游戏手柄被检测为蓝牙键盘,因此未将其检测为游戏控制器。因此,我尝试改用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")
}
Run Code Online (Sandbox Code Playgroud)

但是即使使用上述实现,当我按下游戏手柄上的按钮时,控制台上也不会打印任何内容。

这使我感到困惑。因此,如果您对此有任何答案,请帮助我。提前致谢!

Cod*_*ird 6

我终于设法使它起作用。下面是任何人需要的代码。

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)")
}
Run Code Online (Sandbox Code Playgroud)