Спасибо вам большое! Я получил так много помощи от stackoverflow. Я надеюсь, что смогу ответить на многие вопросы в будущем в ближайшее время!

рабатываю простое приложение для редактирования текста для iPad, используя UITextView. У меня всегда были некоторые проблемы с UIScrollView и UITextView. Я думаю, я просто ожидал слишком многого от этих двух.

Когда я устанавливаю myTextView.text на другой экземпляр NSString, прокрутка происходит автоматически. Я мог бы предотвратить эту прокрутку, установив

myTextView.scrollEnabled = NO;
myTextView.text = newText;
myTextView.scrollEnabled = YES;

Однако, если я изменил свойство selectedRange myTextView, прокрутка произошла.

В частности, если диапазон selectedRange имел место для текста на текущем экране, прокрутка не происходила.

Например, если я выделю весь текст, коснувшись свойства «Выбрать все», прокрутка не произойдет. Но если я выделю весь текст, установив selectedRange в NSMakeRange (0, [длина myTextView.text]), то произойдет прокрутка до конца (последняя позиция каретки).

Чтобы решить проблемы: 1) Я сохранил исходное смещение содержимого myTextView.

CGPoint originalOffset = myTextView.contentOffset;
// change myTextView.selectedRange here
myTextView.selectedRange = originalOffset

Но ничего не случилось.

2) Я вызвал вышеуказанные коды через несколько секунд, используя NSTimer, и прокрутка корректно вернулась в исходное положение (смещение). Однако сначала произошла прокрутка до конца, а затем до самого верха.

Есть ли способ полностью предотвратить прокрутку UITextView на мгновение?

Ответы на вопрос(1)

Решение Вопроса

поместив следующий метод в свой подкласс UITextView:

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated {
  // do nothing
}

Причина, по которой я говорю «почти» всю прокрутку, заключается в том, что даже с учетом вышеизложенного она по-прежнему принимает пользовательские прокрутки. Хотя вы можете отключить их, установив self.scrollEnabled в NO.

Если вы хотите отключить только некоторые прокрутки, то создайте ivar, давайте назовем его acceptScrolls, чтобы определить, хотите ли вы разрешить прокрутку или нет. Тогда ваш метод scrollRectToVisible может выглядеть так:

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated {
   if (self.acceptScrolls)
     [super scrollRectToVisible: rect animated: animated];
}
 pnmn10 янв. 2011 г., 23:54
Спасибо вам большое! Я получил так много помощи от stackoverflow. Я надеюсь, что смогу ответить на многие вопросы в будущем в ближайшее время!

Ваш ответ на вопрос