ios - 在 Swift 中监听硬件键盘按键

标签 ios swift keyboard uikeycommand

我想为我的应用程序添加硬件键盘支持,以便用户可以随时通过按键盘上的某个键来触发要调用的功能。我找到了 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
}

最佳答案

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

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

关于ios - 在 Swift 中监听硬件键盘按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27329598/

相关文章:

keyboard - FF/Latch 和其他警告

ios - NSPredicate ALL 与 SQLite 存储的聚合

ios - 以编程方式向 UINavigationBar 添加提示

swift - 在 iOS8 上以后台模式运行周期性任务

ios - NSNotificationCenter PasteboardChangedNotification 未触发

javascript - iPhone Web App - 防止键盘移动/上推 View - iOS8

ios - 检测到 PDFView 确实滚动了

ios - 如何在 Swift 5 和 iOS 13 中使用 CIFilter sunbeamsGenerator?

xcode - 框架在我的目标之一(屏幕保护程序)中不起作用

ios - 如何在 ios swift 的 tableview 中为 uilabel 添加滑动手势?