iOS 8 textDocumentProxy - возможность удалить более одного пробела?
Я хотел бы удалить несколько пробелов из self.textDocumentProxy
при работе с моим расширением KeyboardViewController
, и было интересно, есть ли поддерживаемый Apple метод, который специально выполняет это действие?
До сих пор я использовал довольно "хакерский" способ сделать следующее (здесь он удаляет все предыдущие символы, найденные на textDocumentProxy
):
for (int i = 0; i < self.textDocumentProxy.documentContextBeforeInput.length; i++){
[self.textDocumentProxy deleteBackward];
}
Проблема с этим заключается в методе deleteBackward
, который, в зависимости от того, какое приглашение выдается, всегда удаляет около половины (это довольно надежно, особенно когда documentContextBeforeInput
длиннее 20 символов) от общего количества раз, которое он сказал удалить. Поскольку это довольно ненадежно, мне было интересно, есть ли способ легко удалить несколько пробелов, или все текстовые сообщения в textDocumentProxy.documentContextBeforeInput
Спасибо!
3 ответа
Существует фундаментальная проблема в используемом вами цикле:
for (int i = 0; i < self.textDocumentProxy.documentContextBeforeInput.length; i++){
[self.textDocumentProxy deleteBackward];
}
i < self.textDocumentProxy.documentContextBeforeInput.length
проверка выполняется несколько раз. И .length
Атрибут фактически уменьшается на 1 для каждого deleteBackward
ты сделаешь. i
однако весело увеличивается на 1 для каждой итерации.
В результате будет удалена только половина.
Вы можете перевернуть заказ, чтобы решить проблему.
for (int i = self.textDocumentProxy.documentContextBeforeInput.length; i > 0; i--){
[self.textDocumentProxy deleteBackward];
}
Вы также можете кэшировать оригинальную длину tex tDocument, прежде чем начать ее изменять.
Может быть, попробуйте это решение, которое будет стирать все во входном тексте, а не только текст перед курсором;)
func deleteInputText() {
if let afterInput = self.textDocumentProxy.documentContextAfterInput {
self.textDocumentProxy.adjustTextPositionByCharacterOffset(afterInput.characters.count)
}
while let _=self.textDocumentProxy.documentContextBeforeInput {
self.textDocumentProxy.deleteBackward()
}
}
while (self.textDocumentProxy.hasText==YES)
{
[self.textDocumentProxy deleteBackward];
}
следует удалить весь текст.
[self.textDocumentProxy deleteBackward];
удаляет только 1 символ