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

标签 ios cocoa-touch uikeyboard uitextinput uitextinputtraits

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

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

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

Default Marked Text

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

enter image description here

我花了几天时间调试这个问题,发现原因是私有(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/

相关文章:

ios - 静音 "table of contents is empty"警告

objective-c - 从文件系统或 URL 解析 Objective-C for iPhone 中的 m3u 文件

ios - 是否可以强制设备的日期测试本地通知?

iphone - Icon@2x.PNG 即使不是?无法将应用程序提交到 iTunes Connect

ios - 包括键盘的 iPhone 快照

ios - 切换 UIKeyboardTypeNamePhonePad 默认 View

ios - NSArray 在 iOS6 中有 5 个对象,但在 iOS5 中有 4 个对象?

c# - "Read .JSON file"统一 C# 中的方法,也适用于 IOS 和 Android 平台

ios - 设备旋转时更改自定义 inputView 的高度

ios - 跨多个 UIViewControllers 重用一个函数