Мне нужно обновить небольшое количество текста в прокручиваемом UITextView. Я буду только вставлять символ, в котором сейчас находится курсор, и я буду делать это одним нажатием кнопки на моей панели навигации.Остановить UITextView от прыжка при программном настройке текста
Моя проблема заключается в том, что всякий раз, когда я вызываю метод setText текстового представления, он перескакивает в нижнюю часть текста. Я пробовал использовать contentOffset и сбросить выбранный Range, но он не работает! Вот мой пример:
// Remember offset and selection
CGPoint contentOffset = [entryTextView contentOffset];
NSRange selectedRange = [entryTextView selectedRange];
// Update text
entryTextView.text = entryTextView.text;
// Try and reset offset and selection
[entryTextView setContentOffset:contentOffset animated:NO];
[entryTextView setSelectedRange: selectedRange];
Есть ли способ, вы можете обновить текст без какого-либо движения прокрутки вообще ... как будто они только что ввели что-то на клавиатуре?
Edit:
Я попытался с помощью textViewDidChange: делегировать метод, но он по-прежнему не прокрутки вверх в исходное местоположение.
- (void)textViewDidChange:(UITextView *)textView {
if (self.programChanged) {
[textView setSelectedRange:self.selectedRange];
[textView setContentOffset:self.contentOffset animated:NO];
self.programChanged = NO;
}
}
- (void)changeButtonPressed:(id)sender {
// Remember position
self.programChanged = YES;
self.contentOffset = [entryTextView contentOffset];
self.selectedRange = [entryTextView selectedRange];
// Update text
entryTextView.text = entryTextView.text;
}
Спасибо за ваш вклад. Что должно произойти в этом методе делегата? Это когда окончательный сброс contentOffset и selectedRange должен иметь место? –