SwiftUI如何获取当前键盘布局(QWERTY/QWERTZ/北欧布局等)
iOS 检测 TextField 对应的键盘布局(QWERTY/AZERTY/QWERTZ等)
核心思路就是利用textField.textInputMode,这个属性能获取当前输入框关联的输入模式信息,从中可以提取键盘布局相关的标识。
实现步骤
监听输入模式变化
当用户切换键盘时,系统会发送UITextInputMode.currentInputModeDidChangeNotification通知,我们可以注册这个通知来实时检测布局变化:override func viewDidLoad() { super.viewDidLoad() // 注册键盘输入模式变化通知 NotificationCenter.default.addObserver(self, selector: #selector(keyboardInputModeChanged), name: UITextInputMode.currentInputModeDidChangeNotification, object: nil) }处理布局检测逻辑
在通知回调里,通过textInputMode的primaryLanguage(语言代码)和inputModeIdentifier(输入模式标识符)来判断布局:@objc private func keyboardInputModeChanged() { guard let inputMode = yourTextField.textInputMode else { return } // 优先通过语言代码判断 switch inputMode.primaryLanguage { case "en-US", "en-GB": print("当前是QWERTY布局") case "fr-FR", "fr-BE": print("当前是AZERTY布局") case "de-DE", "de-AT", "de-CH": print("当前是QWERTZ布局") case "sv-SE", "nb-NO", "da-DK": print("当前是北欧布局") default: // 语言代码不明确时,直接从标识符里匹配布局关键词 let identifier = inputMode.inputModeIdentifier if identifier.contains("AZERTY") { print("当前是AZERTY布局") } else if identifier.contains("QWERTZ") { print("当前是QWERTZ布局") } else if identifier.contains("QWERTY") { print("当前是QWERTY布局") } else { print("无法识别的键盘布局") } } }可选:编辑开始时检测
如果只需要在用户开始编辑TextField时检测布局,也可以在代理方法里处理:func textFieldDidBeginEditing(_ textField: UITextField) { guard let inputMode = textField.textInputMode else { return } // 这里复用上面的判断逻辑即可 }
注意点
primaryLanguage是ISO标准的语言地区代码,大部分场景能直接对应布局,但部分多语言地区可能需要结合inputModeIdentifier,因为标识符字符串里会明确包含布局名称(比如fr_FR@sw=AZERTY;hw=Automatic)。- 记得在页面销毁时移除通知监听,避免内存泄漏:
deinit { NotificationCenter.default.removeObserver(self) }
内容的提问来源于stack exchange,提问作者dor sahar
相关产品推荐
相关产品推荐

