如何让UITextView强制保持仅表情键盘模式且支持表情搜索?
解决方案
你的代码中,监听UITextInputMode.currentInputModeDidChangeNotification并调用reloadInputViews()是导致表情搜索异常的核心原因——当用户在表情搜索框输入时,系统会临时切换输入模式以支持搜索文本输入,此时强制刷新输入视图会打断搜索流程,造成键盘状态异常。
只需移除该通知监听,仅通过重写textInputMode和textInputContextIdentifier即可实现强制表情键盘+支持搜索的需求,修改后的代码如下:
final class ExampleInputTextView: UITextView { init() { super.init(frame: .zero, textContainer: nil) keyboardType = .default } override var textInputContextIdentifier: String? { "emoji-only-input" } override var textInputMode: UITextInputMode? { // 始终优先返回表情输入模式 UITextInputMode.activeInputModes.first { $0.primaryLanguage == "emoji" } ?? super.textInputMode } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } }
原理说明
- 阻止键盘切换:重写
textInputMode后,每当系统尝试切换输入模式时,都会优先获取表情模式,用户点击左下角的“ABC”按钮无法切换到ASCII键盘。 - 支持表情搜索:移除输入模式变化的通知监听后,表情搜索时的临时输入模式切换不会被强制打断,搜索流程可以正常进行。
- 记忆输入模式偏好:
textInputContextIdentifier设置固定值,让系统记住该输入视图的表情模式偏好,避免每次成为第一响应者时重新选择输入模式。
内容的提问来源于stack exchange,提问作者driverDran
相关产品推荐
相关产品推荐

