UITextview содержимое перемещается вверх, когда текстовое представление выбрано - PullRequest
1 голос
/ 10 ноября 2009

Я довольно новичок в этой разработке для iPhone, но до сих пор я создал довольно хорошее приложение, но я наткнулся на эту проблему, которую я, кажется, не могу решить.

В основном приложение представляет собой приложение для общения в социальных сетях. Все работает на 100%, кроме поля ввода, которое в настоящее время является UITextbox. Это прекрасно работает, однако я хотел бы, чтобы окно росло и было многострочным UITextbox с прокруткой. Я заменил UITextbox на UITextview, и все хорошо. У меня UITextview расширяется, когда пользователь вводит текст, однако у меня есть одна небольшая проблема, которая сводит меня с ума.

Когда UITextview получает фокус, он перемещает курсор и любой текст там просто вне поля зрения. UITextview, который я установил для отображения 2 строк по умолчанию, а затем, когда высота текста выходит за рамки этих двух строк, я бы хотел, чтобы поле увеличивалось (что и происходит), а текст оставался прокрученным, чтобы вы могли видеть, что вы типирование. Если вы посмотрите на приложение SMS на iPhone, это именно то, как я бы хотел, чтобы оно работало.

Любые слова мудрости будут с благодарностью.

Ответы [ 3 ]

3 голосов
/ 10 ноября 2009

Я думаю, что Бленк ответил отлично (это будет мой ответ). Но на тот случай, если вы не хотите включать Three20 в свой проект (он довольно большой), ниже приведен соответствующий код от TTTextEditor. Вы должны иметь возможность вызывать это везде, где вы расширяете текстовое представление.

- (void)scrollContainerToCursor:(UIScrollView*)scrollView {
  if (_textView.hasText) {
    if (scrollView.contentSize.height > scrollView.height) {
      NSRange range = _textView.selectedRange;
      if (range.location == _textView.text.length) {
        [scrollView scrollRectToVisible:CGRectMake(0,scrollView.contentSize.height-1,1,1)
          animated:NO];
      }
    } else {
      [scrollView scrollRectToVisible:CGRectMake(0,0,1,1) animated:NO];
    }
  }
}
3 голосов
/ 10 ноября 2009

Выезд три20 :

Three20 - это коллекция классов пользовательского интерфейса iPhone, таких как программа просмотра фотографий, и общих утилит, таких как HTTP-кеш диска. Three20 взят из приложения Facebook для iPhone, которое является одним из самых загружаемых приложений для iPhone.

В частности, вы захотите взглянуть на TTTextEditor :

TTTextEditor - это UITextView, который может автоматически увеличиваться по мере ввода текста. Я использую это для ввода сообщений в чате Facebook, и он ведет себя подобно редактору в приложении SMS от Apple.

Инструкции по добавлению Three20 в ваш проект вы найдете здесь .

0 голосов
/ 16 мая 2014

Я сделал подкласс UITextView только для этого:

https://github.com/MatejBalantic/MBAutoGrowingTextView

Это легкий подкласс UITextView на основе автоматического макета, который автоматически увеличивается и уменьшается в зависимости от размера пользовательского ввода и может быть ограничен максимальной и минимальной высотой - и все это без единой строки кода.

Этот класс предназначен главным образом для использования в Интерфейсном конструкторе и работает только с автоматическим макетом.

...