2013-07-13 3 views
0

У меня есть приложение, в котором есть текстовые поля и одно текстовое изображение, но когда я получаю клавиатуру, она скрывает нижние текстовые поля. Как бы я это сделал.Прокрутка при активации клавиатуры

Я пробовал:

.m:

- (void)textFieldDidBeginEditing:(UITextField *)sender { 
    CGSize content = _scrollView.contentSize; 
    _scrollView.contentSize = CGSizeMake(content.width, content.height + 200); 
    svos = _scrollView.contentOffset; 
    CGPoint pt; 
    CGRect rc = [sender bounds]; 
    rc = [sender convertRect:rc toView:_scrollView]; 
    pt = rc.origin; 
    pt.x = 0; 
    pt.y -= 200; 
    [_scrollView setContentOffset:pt animated:YES]; 
} 

- (IBAction)textFieldShouldReturn:(UITextField *)textField { 
    CGSize content = _scrollView.contentSize; 
    _scrollView.contentSize = CGSizeMake(content.width, content.height - 200); 
    [_scrollView setContentOffset:svos animated:YES]; 
    [textField resignFirstResponder]; 
} 

.h:

CGPoint svos; 

Хотя нижние текстовые поля по-прежнему скрыты это прокручивать до и видимых

+0

То, что вы хотите достичь, не так просто. Вы получили исходное поле текстового поля отправителя, но только увеличиваете его на 60, таким образом, нижние текстовые поля покрываются клавиатурой. Вам нужно будет знать высоту клавиатуры и рассчитать расстояние, чтобы двигаться вверх. Проверьте это [http://stackoverflow.com/questions/1126726/how-to-make-a-uitextfield-move-up-when-keyboard-is-present?rq=1](http://stackoverflow.com/questions/1126726/how-to-make-a-uitextfield-move-up-when-keyboard-is-present? rq = 1) – Rick

+0

@Rick Это работает, кроме того, когда вы изменяете, какой элемент вы редактируете, происходит сбой приложения и если содержание должно быть низким, его нельзя прокрутить до –

+0

. Вы используете scrollview, вы можете расширить его contentSize пустым пространством, чтобы перейти к нижнему текстовому полю. Что касается того, почему приложение разбилось, вам нужно будет уточнить. – Rick

ответ

0

Вы получили исходное поле текстового поля отправителя, но только увеличиваете его на 60, таким образом, нижний tex tfields покрываются клавиатурой. Вам нужно будет знать высоту клавиатуры и рассчитать расстояние, чтобы двигаться вверх. Проверьте this. У него большая часть ответа, поэтому я больше не буду объяснять.

Для перехода к нижней TextField внутри Scrollview, добавьте эти строки в textFieldDidBeginEditing:

CGSize content = _scrollview.contentSize; 
_scrollview.contentSize = CGSizeMake(content.width, content.height + 200); 

Это расширит ваши contentSize программно, так что вы можете прокручивать до последнего текстового поля и позволяют клавиатуре, чтобы покрыть пустое пространство ,

В textFieldDidEndEditing или textFieldShouldReturn, в вашем случае, добавьте это:

CGSize content = _scrollview.contentSize; 
_scrollview.contentSize = CGSizeMake(content.width, content.height - 200); 

Я использовал произвольные 200 в качестве примера. Вам нужно будет выяснить, сколько вы хотите.

+0

Это не добавление px в нижней части –

+0

Просьба уточнить. Кроме того, попробуйте установить параметр 'pt.y - = 60;' на 'pt.y - = 200;' и посмотреть, есть ли какие-либо изменения. – Rick

+0

все еще ничего не происходит –

0

Капля в универсальном решении для перемещения текстовых полей в стороне клавиатуры в прошивкой

https://github.com/michaeltyson/TPKeyboardAvoiding

Он отлично работает для меня.

Просто вам нужно скопировать необходимые классы (TPKeyboardAvoidingScrollView или TPKeyboardAvoidingTableView) в проекте и в вашем строитель файл интерфейса вы должны изменить класс UIScrollView к TPKeyboardAvoidingScrollView или UITableView к TPKeyboardAvoidingTableView, остальные вещи будут обрабатываться этими классами.

enter image description here

+0

Попробуем это благодаря –

0

Вы видели документацию об управлении клавиатурой? (apple documentation) Есть пример того, что, на мой взгляд, вы работаете. Надеюсь, поможет.