自定义 UITextInput 实现不显示多阶段输入建议

Posted

技术标签:

【中文标题】自定义 UITextInput 实现不显示多阶段输入建议【英文标题】:Custom UITextInput implementation not showing multi-stage input suggestions 【发布时间】:2013-11-27 16:25:47 【问题描述】:

我有一个基于UITextInput 的自定义文本编辑器。它工作得很好,除了通过标记文本进行多阶段输入。

我的标记区域正确渲染,并插入了标记文本,但键盘上方的候选列表为空白。

例如,这里是日文(假名)键盘在标准 UITextView 上显示建议:

这是我的自定义编辑器,显示相同的标记文本:

我花了几天时间调试这个问题,发现原因是私有类UIKeyboardImpl为方法delegateSupportsCorrectionUI返回NO

如果我在 UIKeyboardImpl 的类别中覆盖此方法并改为返回 YES,则多级输入建议会正确显示给我的文本编辑器。然而,这并没有解决问题的根本原因(而且它不可用)。

我还非常仔细地查看了 Apple 的 SimpleTextInput 示例代码。这实现了一个基本的核心文本编辑器。 SimpleTextInput 正确显示多级输入建议,但是我似乎无法在其实现 UITextInput 中找到任何区别,这会导致它工作而我的中断。

(事实上,我无法“破坏” SimpleTextInput 示例显示多阶段输入的能力。这让我认为我对 UITextInput 实现的关注是错误的。而且它完全是另外一回事.)

【问题讨论】:

【参考方案1】:

好吧,这有点尴尬。我刚刚注意到:

@property(nonatomic, readonly) UIView *textInputView

讨论

既绘制文本又提供坐标系的视图 本协议中的所有几何值。 (这通常是一个实例 UITextInput-adopting 类。)如果此属性未实现, 响应者链中的第一个视图被选中。

在文档中。

我愚蠢地 @synthesize'd 这个属性并忘记了它,这意味着我的 UITextInput 实现返回了一个 nil textInputView。只需保持未实现即可从响应者链中选择第一个视图,如所述,它为文本系统提供了必要的坐标系来处理自动更正和多阶段输入建议。

这是经过三天的调试。现在我觉得自己很愚蠢。

【讨论】:

以上是关于自定义 UITextInput 实现不显示多阶段输入建议的主要内容,如果未能解决你的问题,请参考以下文章

何时调用 -[UITextInput selectionRectsForRange:]?

UITextInput 的 Tokenizer,它是做啥用的?

WPS表格如何实现让单元格输入内容后变成*,就像输密码一样?

java实现多表的自定义查询。

我们如何实现 selectionRectsForRange: 从 UITextInput 协议?

用于多运输的 magento 自定义支付模块