【问题标题】:Listening for hardware keyboard key presses in Swift在 Swift 中监听硬件键盘按键
【发布时间】:2015-02-04 10:22:38
【问题描述】:

我想为我的应用添加硬件键盘支持,以便用户可以随时通过按下键盘上的某个键来触发要调用的函数。我找到了this article,并且能够让它在 Objective-C 中运行良好。我已将其转换为 Swift,但由于某种原因,在我按下“c”后没有调用 keyPressed 方法。我确认只要用户按下键盘上的任何键,就会调用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
}

【问题讨论】:

    标签: ios swift keyboard uikeycommand


    【解决方案1】:

    问题是keyCommands 每次按下键时都会被调用,并且每次我初始化一个数组以使其为空时,我都会返回它。所以第一次调用该方法会返回正确的数组,但第二次会返回一个没有内容的数组。

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

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-25
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      相关资源
      最近更新 更多