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 символ

Другие вопросы по тегам