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

如何让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")
    }
}

原理说明

  1. 阻止键盘切换:重写textInputMode后,每当系统尝试切换输入模式时,都会优先获取表情模式,用户点击左下角的“ABC”按钮无法切换到ASCII键盘。
  2. 支持表情搜索:移除输入模式变化的通知监听后,表情搜索时的临时输入模式切换不会被强制打断,搜索流程可以正常进行。
  3. 记忆输入模式偏好:textInputContextIdentifier设置固定值,让系统记住该输入视图的表情模式偏好,避免每次成为第一响应者时重新选择输入模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:33:35