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

时间:2014-08-19 23:34:47

标签: ios ios8 textdocumentproxy

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

到目前为止,我一直在使用漂亮的" hacky"执行以下操作的方法(此处删除textDocumentProxy上找到的所有先前字符):

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

问题在于deleteBackward方法,根据给出的提示,它总是删除大约一半(它非常可靠,特别是当documentContextBeforeInput长于20个字符时)告知要删除的总次数。由于这是相当不可靠的,我想知道是否有办法轻松删除多个空格,或textDocumentProxy.documentContextBeforeInput

中的所有短信

谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

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

结果只会删除一半。

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

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

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

答案 1 :(得分:0)

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

func deleteInputText() {

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

            self.textDocumentProxy.deleteBackward()


    }

}

答案 2 :(得分:-1)

while (self.textDocumentProxy.hasText==YES)
{    
  [self.textDocumentProxy deleteBackward];      
}

应删除所有文字。

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