4

在 iOS 8 键盘扩展上,我添加了一个UITextField,以便用户能够在键盘内搜索表情符号或其他元素。

在用户正在键入的情况下,例如在 Notes.app 中,用户点击键盘扩展上的搜索字段开始搜索。点击后,扩展程序会记录:

-[UIKeyboardInputManagerClient handleError:forRequest:] 将在收到错误 Domain=NSCocoaErrorDomain Code=4099 "The operation could not be completed. (Cocoa error 4099.)" 后重试发送 syncToKeyboardState:completionHandler: 到键盘守护进程(连接到名为 com 的服务.apple.TextInput 无效。) UserInfo=0x170276e00 {NSDebugDescription=与名为 com.apple.TextInput 的服务的连接无效。}

请检查 kbd 崩溃日志。-[UIKeyboardInputManagerClient handleError:forRequest:] 在连续两次发送失败后关闭与键盘守护进程的连接

在此之后,用户点击 Notes.app 文本以返回编辑它。现在使用发送到 textDocumentProxy 的任何文本insertText:仍然会转到我的键盘扩展UITextField而不是 Notes.app 文本。

textDidChange:点击它时,仍会从 Notes 文本中调用委托方法。此外,textDocumentProxys 属性documentContextBeforeInputdocumentContextAfterInput包含来自 Notes.app 文本的正确文本。

看起来UITextField现在是 textDocumentProxy 的“侦听器”,但它不应该是。

我试过了,没有成功:

  • 设置userInteractionEnabled = NOUITextField
  • resignFirstResponderUITextField
  • endEditing:YESUITextField
  • 监视textDocumentProxy属性的更改,但它一直引用同一个对象。

一种解决方法是选择另一个键盘,然后返回我的键盘。然后连接恢复,一切恢复正常。(直到用户再次点击我的 UITextField)。

在 App Store 中,我发现了几个具有相同问题的自定义键盘应用程序。这使我认为这是无法解决的。但是,我还发现自定义键盘应用程序运行良好,用户可以毫无问题地在文本字段中跳转。

有任何想法吗?

4

0 回答 0