问题标签 [textdocumentproxy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
532 浏览

nsstring - 如何在 iOS 的 textDocumentProxy 中删除最后一个字母之前的字母?

我们可以使用deleteBackwardinTextDocumentProxy删除最后一个字母。

现在我需要删除最后一个字母的字母。

例如。Apple,我想删除l之前的信e

我该怎么做?

0 投票
3 回答
1671 浏览

ios - iOS 8 textDocumentProxy - 能够删除多个空格?

我想self.textDocumentProxy在使用我的扩展时删除多个空格KeyboardViewController,并且想知道是否有 Apple 支持的方法专门执行此操作?

到目前为止,我一直在使用一种非常“hacky”的方式来执行以下操作(这里它删除了在 上找到的所有以前的字符textDocumentProxy):

这个问题在于方法deleteBackward,根据给出的提示,它总是删除documentContextBeforeInput它被告知要删除的总次数的大约一半(它非常可靠,尤其是当超过 20 个字符时)。由于这是相当不可靠的,我想知道是否有一种方法可以轻松删除多个空格,或者所有发短信的textDocumentProxy.documentContextBeforeInput

谢谢!

0 投票
2 回答
4339 浏览

ios - iOS:自定义键盘:我想将图像发送到 textDocumentProxy(输入控件)

我正在实现只有图像的自定义键盘,并希望在单击图像时将图像发送到 textDocumentProxy/input 控件,例如 textview,但不能克服它。到目前为止,我能够将文本/字符串发送到输入控件,但不能发送图像。

是否可以将图像发送到输入控件?

任何建议或解决方案都将受到高度赞赏。

0 投票
0 回答
1362 浏览

ios - iOS 8 键盘扩展:UIInputViewController textDocumentProxy 连接无效

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

有任何想法吗?

0 投票
1 回答
293 浏览

ios - 在应用程序中使用自定义 InputViewController

我目前的任务是 iOS 键盘扩展。现在,要通过 App Store Review,包含应用程序必须提供一些“真实”内容。我想过让用户在“设置”中启用它之前测试键盘。所以我的故事板看起来像这样(减少显示相关的东西):

这一切正常,键盘显示在容器中,但是 - 由于textDocumentProxy键盘视图控制器中的对象没有附加到任何东西 - 用户看不到他/她正在输入的内容。

现在我正在寻找一种将键盘“附加”到文本字段的方法,同时保持系统键盘不受干扰,以便用户可以在自定义键盘上键入。

我已经设法通过将以下函数附加到文本字段的editing did begin操作来移除系统键盘。

0 投票
1 回答
2171 浏览

ios - 带有 UITextField 的自定义键盘扩展

我有自定义键盘扩展,其中包含 UITextField。我可以切换到UITextField的文本输入,但无法切换回self.textDocumentProxy. 有谁知道,如何做类似的事情[self.textDocumentProxy becomeFirstResponder]

(顺便说一句,“GIF 键盘”应用似乎提供了这种可能性)

0 投票
0 回答
109 浏览

ios - 是否可以防止 textDocumentProxy “拆分”表情符号?

我目前正在为 iOS 开发第三方键盘,遇到了一个小烦恼textDocumentProxy,我希望你们都可以帮助我。

所以我定义了以下两个变量,我将它们打印到控制台 -

和一个 UIPanGesture,adjustTextPositionByCharacterOffset()根据平移的方向加 1 或 -1。所以在平移光标时,会打印光标前后的内容。这一切都很好,除非字符串包含表情符号(即)。表情符号总是最终被拆分为未定义的字符,如下所示(在这种情况下,咧嘴笑的表情符号被拆分)

任何帮助将不胜感激。谢谢!

0 投票
0 回答
391 浏览

ios - 使用 dispatch_async 时的 EXC_BAD_ACCESS。如何防止物体被释放?

我有以下功能:

其中deleteCounter是一个默认设置为零的整数。

该代码应该起作用,因此当按下我的自定义键盘应用程序扩展上的删除键时,如果它仍在循环,它将不会调用删除循环,从而防止过多的方法调用。

代码似乎工作正常,但如果我在很长一段时间内快速点击删除按钮(从而重复调用此函数),我会收到以下错误:

Thread 3: EXC_BAD_ACCESS(code = 1,address=0x10)

在这条线上:

我从不修改该self.textDocumentProxy对象,因为它只是 IOS 为您可以随时访问的键盘扩展提供的默认对象。

在阅读了EXC_BAD_ACCESS错误之后,我发现这可能是因为该self.textDocumentProxy对象在某个时候从内存中释放了。

如何防止self.textDocumentProxy被释放,或者如何确保我始终可以获得对象的未发布副本?

更新:

我启用了僵尸对象,我收到以下错误消息:

self.textDocumentProxy这似乎证实了我正在取消分配的怀疑。

0 投票
1 回答
49 浏览

ios - IOS 会在 UI 更新时收到通知。

我有一个自定义键盘扩展。按下删除键时调用此函数:

我认为这dispatch_async无关紧要,但我将其包括在内,以防万一。

问题是,即使我的控制台在循环完成后打印“删除结束”,文本字段的 UI 也不会更新,直到一两秒过去。

似乎在召唤

(self.textDocumentProxy as UIKeyInput).deleteBackward()

不会立即删除角色并更新 UI。

当 UI 实际更新时如何通知我?

0 投票
1 回答
77 浏览

ios - 每次调用非常简单的方法时分配和不释放的内存

在 IOS 键盘应用程序扩展中按下删除按钮时,我有以下方法被调用:

但是,每次调用此方法时,我的键盘内存使用量都会增加 1-2mb 并且不会回落。这很快就会导致崩溃。

我没有在这个线程中分配或取消分配任何对象,所以我不确定为什么会出现大量内存泄漏。

更新:

我改为dispatch_get_main_queue()静态变量:

并用于mainqueue代替,dispatch_get_main_queue但这并没有做任何事情。

更新 2:

我添加了一个名为的变量tempProxy,每次调用 delete 时都会创建该变量:

let tempProxy = (self.textDocumentProxy as UIKeyInput) 然后在dispatch_async我用这个:

我这样做是因为我听说引用self可能会导致内存保留。

更新 3:

我变了:

到一个print()声明。

内存使用量现在少了很多。但是,我对为什么仍然没有释放内存感到困惑。