2015-08-17 28 views
3

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

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

我一直在尝试使用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") 
} 

但即使有上述实施过程中,打印在控制台当我在游戏手柄按下一个按钮。

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

+0

您需要返回'UIKeyCommand'从UIResponder子类的实例 - 你可以,例如,子'UIView',使这方面的一个实例,该视图控制器根视图 – Paulw11

+0

对不起,我真的不得到的iOS /斯威夫特,就像我刚刚学到的那样。你能解释一下吗?或者如果可能的话提供一个样本? @ Paulw11 – CodingBird

+0

我终于设法让它工作!感谢提示@ Paulw11 – CodingBird

回答

4

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

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)") 
} 
+0

你好,为什么你需要重写var keyCommands? – mm24