我有一个基于自定义UITextInput
的文本编辑器。除了通过标记文本进行多阶段输入外,它的效果非常好。
我的标记区域正确渲染,并插入了标记文本,但键盘上方的候选列表为空白。
例如,这里是日语(假名)键盘,显示标准UITextView的建议:
这是我的自定义编辑器,显示相同的标记文本:
我花了几天时间调试此问题,并发现原因是私有类UIKeyboardImpl
返回NO
方法delegateSupportsCorrectionUI
如果我在UIKeyboardImpl
的类别中覆盖此方法并返回YES
,则会为我的文本编辑器正确显示多级输入建议。然而,这并没有解决问题的根本原因(并且它不可用)。
我还仔细研究了Apple的SimpleTextInput示例代码。这实现了一个基本的Core Text编辑器。 SimpleTextInput正确地显示了多阶段输入建议,但是我似乎无法在UITextInput
的实现中找到导致它工作并且我的中断的单一差异。
(事实上,我无法"打破" SimpleTextInput示例显示多阶段输入的能力。这让我认为我专注于UITextInput
实施这是错误的轨道。它完全是另一回事。)
答案 0 :(得分:3)
好的,这有点令人尴尬。我刚才注意到:
@property(nonatomic, readonly) UIView *textInputView
<强>讨论强>
两者都绘制文本并为其提供坐标系的视图 此协议中的所有几何值。 (这通常是一个实例 采用UITextInput的类。)如果此属性未实现, 选择响应者链中的第一个视图。
在文档中。
我愚蠢@synthesize
这个属性并忘了它,这意味着我的UITextInput实现返回nil
textInputView
。如果没有实现,只需从响应器链中选择第一个视图,它为文本系统提供必要的坐标系统来处理自动校正和多级输入建议。
这是经过三天的调试。现在我觉得很蠢。