Поведение UITextViewDelegate, когда клавиша Backspace находится в состоянии HELD Down - PullRequest
4 голосов
/ 15 мая 2011

Я столкнулся с проблемой, когда iOS выдает неверную информацию UITextViewDelegate, когда клавиша удаления удерживается на клавиатуре.

Когда пользователь HOLDS клавиша удаления в UITextViewна iPad UITextView начнет удалять целые слова вместо отдельных символов, чем дольше он удерживается (примечание: это не происходит в симуляторе).

Когда это происходит, метод делегата UITextView:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

Получает вызов с диапазоном, состоящим из правильного расположения курсора, но длиной 1. Это неверно, поскольку UITextView теперь удаляет целые слова, а не отдельные буквы.Например, следующий код будет печатать только один пробел.

[textView substringWithRange:range]
string contains " "

Несмотря на то, что UITextView удаляет целое слово.Текст замены правильно указан как пустая строка.Кто-нибудь знает решение или решение этой проблемы?

1 Ответ

4 голосов
/ 07 февраля 2012

Джейкоб упомянул, что я должен опубликовать это как ответ. Итак, вот оно.

Мой хакерский обходной путь - это отслеживать длину текста и диапазон, указанный в shouldChangeTextInRange, а затем сравнивать его с длиной текста в textViewDidChange. Если различия не синхронизированы, я очищаю свой резервный текстовый буфер и перестраиваю его из текстового представления. Это не оптимально. Вот мой временный обходной путь:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    //Push the proposed edit to the underlying buffer
    [self.editor.buffer changeTextInRange:range replacementText:text];

    //lastTextLength is an NSUInteger recording the length that
    //this proposed edit SHOULD make the text view have
    lastTextLength = [textView.text length] + ([text length] - range.length);

    return YES;
}

- (void)textViewDidChange:(UITextView *)textView
{
    //Check if the lastTextLength and actual text length went out of sync
    if( lastTextLength != [textView.text length] )
    {
        //Flush your internal buffer
        [self.editor.buffer loadText:textView.text];
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...