You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS开发:如何判断外接硬件键盘是否处于激活状态?

如何判断外接硬件键盘的激活状态

这个问题问得很到位!我之前做iOS项目时刚好遇到过类似需求,给你分享几个实用的方案:

方案一:监听输入模式变化通知 + 系统硬件键盘状态API

iOS 13及以后提供了直接判断外接键盘是否连接的API,结合输入模式变化通知,可以精准捕获键盘状态的切换:

  1. 首先注册UITextInputMode.currentInputModeDidChangeNotification通知,这个通知会在用户切换输入方式(包括外接键盘/软键盘切换、输入法切换)时触发。
  2. 在通知回调里,通过UIApplication.shared.isHardwareKeyboardAttached属性判断当前是否有外接键盘激活。

示例代码:

override func viewDidLoad() {
    super.viewDidLoad()
    // 注册输入模式变化通知
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(onInputModeChanged),
        name: UITextInputMode.currentInputModeDidChangeNotification,
        object: nil
    )
}

@objc private func onInputModeChanged() {
    let isHardwareKeyboardActive = UIApplication.shared.isHardwareKeyboardAttached
    if isHardwareKeyboardActive {
        print("外接硬件键盘已激活")
        // 这里执行你的业务逻辑,比如调整布局、隐藏软键盘相关的UI等
    } else {
        print("外接键盘已断开或切换回软键盘")
        // 处理对应的状态变化逻辑
    }
}

// 记得在deinit里移除通知
deinit {
    NotificationCenter.default.removeObserver(self)
}

方案二:结合文本视图的编辑状态 + 硬件键盘检查

如果需要在用户开始编辑文本视图时立刻判断外接键盘状态,可以结合UITextViewDelegate的方法:

extension YourViewController: UITextViewDelegate {
    func textViewDidBeginEditing(_ textView: UITextView) {
        // 延迟一小段时间确保系统状态更新完成
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            let isHardwareActive = UIApplication.shared.isHardwareKeyboardAttached
            if isHardwareActive {
                print("用户开始编辑时,外接键盘处于激活状态")
            }
        }
    }
}

兼容iOS 13以下版本的变通方案

如果你的项目需要支持iOS 13之前的系统,没有isHardwareKeyboardAttached这个API,可以用以下不太完美但可用的方法:

  • 当UITextView成为第一响应者后,若在短时间内没有收到UIKeyboardWillShowNotification通知,大概率是用户使用了外接键盘(注意:这个方法在iPad分屏等特殊场景下可能不准确,仅作为降级方案)。

注意事项

  • isHardwareKeyboardAttached仅表示外接键盘是否物理连接,当用户连接了外接键盘但手动切换回软键盘时,这个属性仍然为true,这时候需要结合输入模式变化通知来判断实际使用的键盘类型。
  • 在外接键盘和软键盘之间切换时,UITextInputMode.currentInputModeDidChangeNotification会可靠触发,所以通过这个通知来监听状态变化是最稳妥的方式。

内容的提问来源于stack exchange,提问作者newszer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:05:38