UITextView textView: shouldChangeTextInRange: replaceText: не срабатывает при удалении больших частей текста? - PullRequest
4 голосов
/ 07 августа 2009

Я пытаюсь реализовать счетчик символов для UITextView, но обнаружил, что счетчик является неточным в следующей ситуации:

  • Введите несколько символов текста, например "The"
  • Нажмите возврат 25 раз
  • Удерживая нажатой кнопку удаления, чтобы удалить текст (и удерживайте ее, пока курсор не достигнет вершины)
  • Когда курсор достигает вершины (и после удаления «The»), счетчик все еще говорит, что UITextView содержит 3 символа
  • Коснитесь кнопки удаления еще раз, чтобы счетчик сам исправился и сказал, что в нем 0 символов

В этой ситуации я вывел результаты счетчика и replaceText, и последний вывод выглядит следующим образом:

2009-08-06 15: 29: 14.357 Символы: 3
2009-08-06 15: 29: 14.369

Следовательно, кажется, что, когда таким образом массово удаляются большое количество новых строк (и, возможно, больших частей текста), textView: shouldChangeTextInRange: replaceText: не запускается в конце этой последовательности, что требует дополнительное нажатие кнопки удаления.

Мой код счетчика выглядит следующим образом:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    NSString* nextText = [textView.text stringByReplacingCharactersInRange:range withString:text];
    int characterCount = [nextText length];

Любые идеи о том, как преодолеть это, чтобы счет был правильным в этой ситуации (или что я могу делать неправильно)?

1 Ответ

2 голосов
/ 07 августа 2009

Я до сих пор не знаю о проблеме с textView: shouldChangeTextInRange: replaceText: не вызывается, но я только что обнаружил, что помещение кода счетчика в textViewDidChange: (что является более логичным местом для этого кода) работает должным образом.

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