1

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

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

for (int i = 0; i < self.textDocumentProxy.documentContextBeforeInput.length; i++){
        [self.textDocumentProxy deleteBackward];
    }

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

谢谢!

4

3 回答 3

1

您正在使用的循环中有一个基本问题:

for (int i = 0; i < self.textDocumentProxy.documentContextBeforeInput.length; i++){
    [self.textDocumentProxy deleteBackward];
}

i < self.textDocumentProxy.documentContextBeforeInput.length检查执行多次。每做一次,该.length属性实际上就会减少 1 。然而,每次迭代都会愉快地增加 1。deleteBackwardi

结果只有一半会被删除。

您可以翻转订单来解决问题。

for (int i = self.textDocumentProxy.documentContextBeforeInput.length; i > 0; i--){
    [self.textDocumentProxy deleteBackward];
}

您还可以在开始更改之前缓存 textDocument 的原始长度。

于 2014-09-26T11:26:38.523 回答
0

也许试试这个解决方案,它将删除输入文本中的所有内容,而不仅仅是光标之前的文本;)

func deleteInputText() {

    if let afterInput = self.textDocumentProxy.documentContextAfterInput {
        self.textDocumentProxy.adjustTextPositionByCharacterOffset(afterInput.characters.count)
    }
    while let _=self.textDocumentProxy.documentContextBeforeInput {

            self.textDocumentProxy.deleteBackward()


    }

}
于 2016-07-09T00:46:41.963 回答
-1
while (self.textDocumentProxy.hasText==YES)
{    
  [self.textDocumentProxy deleteBackward];      
}

应该删除所有文本。

[self.textDocumentProxy deleteBackward];仅删除 1 个字符。

于 2014-09-26T11:01:29.510 回答