iOS: 如何检测键盘变化事件

iOS: How to detect keyboard change event

Xcode 9.2,iOS 10.0+,swift4.

我正在开发一个项目,用户在 UITextField 中输入英文字符并将其转换为日文字符。它工作完美。现在,我想让用户直接从日语输入日语字符 Keyboard.In 这种情况我想知道键盘从默认设置更改为另一个 type/language.

那么,有什么功能或通知可以帮助我吗?

注册接收以下通知:

UITextInputCurrentInputModeDidChangeNotification

只要键盘语言发生变化,您就会收到通知。您可以从 UITextInputMode 文档中获取更多信息。

您可以使用 UITextInputCurrentInputModeDidChange 通知来检测当前键盘语言何时更改。

NotificationCenter.default.addObserver(self, selector: #selector(inputModeDidChange), name: .UITextInputCurrentInputModeDidChange, object: nil)

@objc func inputModeDidChange(_ notification: Notification) {
    if let inputMode = notification.object as? UITextInputMode {
        if let lang = inputMode.primaryLanguage {
            // do something
        }
    }
}

随着最近对 iOS 12、swift 5.0 的更改,您可以尝试:

func prepareForKeyboardChangeNotification() {
    NotificationCenter.default.addObserver(self, selector: #selector(changeInputMode), name: UITextInputMode.currentInputModeDidChangeNotification, object: nil)
}

@objc
func changeInputMode(notification: NSNotification) {
    let inputMethod = txtInput.textInputMode?.primaryLanguage
    //perform your logic here

}

在较新的 Swift 版本中,通知已重命名为 UITextInputMode.currentInputModeDidChangeNotification

在 swift 4.2

 //keyboard type change
    NotificationCenter.default.addObserver(self, selector: #selector(inputModeDidChange), name: UITextInputMode.currentInputModeDidChangeNotification, object: nil)


@objc func inputModeDidChange(_ notification: Notification) {
    if let inputMode = notification.object as? UITextInputMode {
        if let lang = inputMode.primaryLanguage {
            print("langueage:: \(lang)")
        }
    }
}