UITextView делегат метод textView: shouldChangeTextInRange: replaceText: дает ошибочный замещающий текст при быстром удалении - PullRequest
3 голосов
/ 15 февраля 2012

У меня есть UITextView, и я записываю все события изменения текстового представления в массив.

Когда пользователь быстро удаляет (удерживая клавишу удаления, чтобы слова удалялись одновременно, а не только один)символ), когда вызывается метод textView: shouldChangeTextInRange: replaceText, длина переменной диапазона составляет всего 1, тогда как в действительности диапазон должен быть числом удаленных в слове букв.Кто-нибудь знает какие-либо обходные пути для этой ошибки Apple, чтобы я мог правильно определить местоположение и диапазон, а также текст, измененный в UITextView?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2014

Как вы упомянули в своем вопросе, «диапазон» всегда равен 1, даже если целое слово удалено. Вы должны проверить длину диапазона 'range.length', который предоставит вам точное количество символов, удаляемых из вашего UITextView. У меня был такой же сценарий, и я немного поработал на его основе, что позволит удалить сразу только один символ, а не все слово:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if([text isEqualToString:@""]) {
        // Check if length of range being deleted is less than 1 then only delete it
        if (range.length > 1) {
            return NO;
        } else
            return YES;
    } else {
        return YES;
    }
}
0 голосов
/ 15 февраля 2012

Нет, это не ошибка.Эта функция будет вызывать каждый раз, когда ваш текст меняется.Вероятно, вы работаете в режиме отладки и отдаете клавишу Backspace с помощью клавиатуры.Он сгенерирует несколько событий перед достижением точки останова.Таким образом, функция будет вызываться несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...