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

时间:2013-11-27 16:25:47

标签: ios cocoa-touch uikeyboard uitextinput uitextinputtraits

我有一个基于自定义UITextInput的文本编辑器。除了通过标记文本进行多阶段输入外,它的效果非常好。

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

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

Default Marked Text

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

enter image description here

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

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

我还仔细研究了Apple的SimpleTextInput示例代码。这实现了一个基本的Core Text编辑器。 SimpleTextInput正确地显示了多阶段输入建议,但是我似乎无法在UITextInput的实现中找到导致它工作并且我的中断的单一差异。

(事实上,我无法"打破" SimpleTextInput示例显示多阶段输入的能力。这让我认为我专注于UITextInput实施这是错误的轨道。它完全是另一回事。)

1 个答案:

答案 0 :(得分:3)

好的,这有点令人尴尬。我刚才注意到:

@property(nonatomic, readonly) UIView *textInputView
  

<强>讨论

     

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

在文档中。

我愚蠢@synthesize这个属性并忘了它,这意味着我的UITextInput实现返回nil textInputView。如果没有实现,只需从响应器链中选择第一个视图,它为文本系统提供必要的坐标系统来处理自动校正和多级输入建议。

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