在 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 属性documentContextBeforeInput
并documentContextAfterInput
包含来自 Notes.app 文本的正确文本。
看起来UITextField
现在是 textDocumentProxy 的“侦听器”,但它不应该是。
我试过了,没有成功:
- 设置
userInteractionEnabled = NO
在UITextField
resignFirstResponder
在UITextField
endEditing:YES
在UITextField
- 监视
textDocumentProxy
属性的更改,但它一直引用同一个对象。
一种解决方法是选择另一个键盘,然后返回我的键盘。然后连接恢复,一切恢复正常。(直到用户再次点击我的 UITextField)。
在 App Store 中,我发现了几个具有相同问题的自定义键盘应用程序。这使我认为这是无法解决的。但是,我还发现自定义键盘应用程序运行良好,用户可以毫无问题地在文本字段中跳转。
有任何想法吗?