【问题标题】:iOS Swift Interrupt Keyboard EventsiOS Swift 中断键盘事件
【发布时间】:2015-11-09 18:46:15
【问题描述】:

我无法拦截键盘事件。我已将我的 iOS 与 SteelSeries Free(游戏手柄控制器)连接起来,当连接到 iOS 时,它将被检测为蓝牙键盘。这是在我打开Notes时测试的,在游戏手柄中按下任何按钮都会写一个字母。

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

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

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

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

【问题讨论】:

  • 您需要从 UIResponder 子类返回 UIKeyCommand 实例 - 例如,您可以将 UIView 子类化并创建一个该视图控制器的根视图实例
  • 对不起,我没有真正了解 iOS / Swift,因为我几天前才学到。你能解释更多,或者如果可能的话提供一个样本? @Paulw11
  • 我终于设法让它工作了!感谢@Paulw11 的提示

标签: ios swift keyboard gamecontroller uikeycommand


【解决方案1】:

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

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

【讨论】:

  • 我也尝试在 iPad/iPhone 上处理键盘事件。您的解决方案解决了我的问题!想知道你是否知道如何检测“key-down”和“key-up”状态。之所以问,是不是因为这个状态对于一个游戏来说很重要,比如一个游戏需要检测当前方向键是被按下还是松开。我还没有找到答案。
  • 知道如何在 swiftui 中完成这项工作吗?
猜你喜欢
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2015-11-23
相关资源
最近更新 更多