当input模式从听写改为手写时,iOS键盘会挂起

那里。

一个简短的前言。 我有一个iOS的游戏,玩家可以input他们的名字。 对于input我使用标准的iOS键盘。 游戏使用OpenGL ES 2.0作为渲染引擎。

一切正常,除了当我在iPad上添加一个中文手写键盘时,在尝试input玩家名称时切换到它,然后我开始非常迅速地将input模式从听写转换为手写并返回。 所以,我只是坐在那里,当手写键盘处于活动状态时,随机点击听写button,然后在Siri激活时点击“完成”button。

一段时间之后,键盘在听写和手写模式之间的某个地方挂起。 它不响应“完成”button。 closures应用程序和重新打开将有所帮助,但这不是一个选项。

在屏幕截图( 键盘的屏幕截图 )上可以看到,Siri模式主宰键盘input模式,而底部的矩形是手写input模式的一部分。

所以, 问题是 :我可以做任何关于这个问题,或者我没有影响iOS键盘?

PS进一步的细节:对于input我使用隐藏(在屏幕外)UITextField。 当我需要显示键盘时,我将这个文本字段作为第一个响应者,popup键盘。

有一个内部错误消息:“请求caretRectForPosition:超出NSTextStorage(-1)”的位置,我通过基于UITextField创build自定义类并重新定义此方法,如下所示:

- (CGRect)caretRectForPosition:(UITextPosition *)position { CGRect rect = [super caretRectForPosition:position]; if (rect.origin.x == INFINITY || rect.origin.y == INFINITY) { rect = CGRectMake(0, 0, 0, 0); } return rect; } 

它确实帮助消除了内部的错误,但没有帮助键盘挂起。