4

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

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

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

默认标记文本

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

在此处输入图像描述

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

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

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

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

4

1 回答 1

3

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

@property(nonatomic, readonly) UIView *textInputView

讨论

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

在文档中。

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

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

于 2013-11-27T16:36:40.593 回答