我有一个自定义的基于 UITextInput
的文本编辑器。它工作得很好,除了通过标记文本进行多阶段输入。
我的标记区域正确呈现,并且插入了标记文本,但键盘上方的候选列表是空白的。
例如,这是在标准 UITextView 上显示建议的日文(假名)键盘:
这是我的自定义编辑器,显示相同的标记文本:
我花了几天时间调试这个问题,发现原因是私有(private)类 UIKeyboardImpl
返回 NO
方法 delegateSupportsCorrectionUI
如果我在 UIKeyboardImpl
的类别中重写此方法并改为返回 YES
,那么多级输入建议会正确显示给我的文本编辑器。然而,这并没有解决问题的根本原因(而且它不可用)。
我还仔细研究了 Apple 的 SimpleTextInput 示例代码。这实现了一个基本的 Core Text 编辑器。 SimpleTextInput 正确显示多级输入建议,但我似乎无法在它的 UITextInput
实现中找到导致它工作和我的中断的单一差异。
(事实上,我无法“破坏”SimpleTextInput 示例显示多阶段输入的能力。这让我认为我对 UITextInput
实现的关注是错误的轨道。并且这完全是另一回事。)
最佳答案
好吧,这有点尴尬。我刚刚注意到:
@property(nonatomic, readonly) UIView *textInputView
Discussion
The view that both draws the text and provides a coordinate system for all geometric values in this protocol. (This is typically an instance of the UITextInput-adopting class.) If this property is unimplemented, the first view in the responder chain is selected.
在文档中。
我愚蠢地 @synthesize
了这个属性并忘记了它,这意味着我的 UITextInput 实现返回了一个 nil
textInputView
。简单地让它未实现会从响应链中选择第一个 View ,如所述,它为文本系统提供必要的坐标系来处理自动更正和多级输入建议。
这是经过三天的调试。现在我觉得自己很愚蠢。
关于ios - 自定义 UITextInput 实现不显示多阶段输入建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20247796/