我想在使用我的扩展程序self.textDocumentProxy
时删除KeyboardViewController
中的多个空格,并且想知道是否有Apple支持的方法专门执行此操作?
到目前为止,我一直在使用漂亮的" hacky"执行以下操作的方法(此处删除textDocumentProxy
上找到的所有先前字符):
for (int i = 0; i < self.textDocumentProxy.documentContextBeforeInput.length; i++){
[self.textDocumentProxy deleteBackward];
}
问题在于deleteBackward
方法,根据给出的提示,它总是删除大约一半(它非常可靠,特别是当documentContextBeforeInput
长于20个字符时)告知要删除的总次数。由于这是相当不可靠的,我想知道是否有办法轻松删除多个空格,或textDocumentProxy.documentContextBeforeInput
谢谢!
答案 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个字符。