Как сделать прокрутку UITextView полностью до дна, когда клавиатура видна - PullRequest
2 голосов
/ 24 ноября 2010

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

Есть ли какой-то очевидный / простой / стандартный способ справиться с этим?Я предполагаю, что это общая проблема.Я предполагаю, что вам нужно изменить размер текстового представления, когда клавиатура поднята, или что-то в этом роде?

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

Большое спасибо, ребята

Ответы [ 2 ]

4 голосов
/ 24 ноября 2010

Это подробно обсуждалось здесь: Как заставить UITextField двигаться вверх при наличии клавиатуры?

Я лично использовал решение Шиуна в прошлом, и оно хорошо работает.

UPDATE: Если вы не хотите использовать этот метод, то немного более простой способ - изменить размер вашего текстового поля при отображении клавиатуры. Было бы лучше следовать инструкциям по ссылке, которую я разместил выше, поскольку уведомление KeyboardWillShow предоставит вам доступ к высоте клавиатуры.

Сначала установите делегат UITextField = self. Тогда:

-(void)textFieldDidBeginEditing:(UITextField *)textField { // This is where the keyboard becomes visible
    textField.frame = CGRectMake(textField.frame.origin.x, textField.frame.origin.y, textField.frame.size.width, textField.frame.size.height-100);
}

-(void)textFieldDidEndEditing:(UITextField *)textField { // This is where the keyboard hides itself
    textField.frame = CGRectMake(textField.frame.origin.x, textField.frame.origin.y, textField.frame.size.width, textField.frame.size.height+100);
}

Вы можете настроить 100 в зависимости от вашей ориентации и т. Д. Если вы хотите добавить анимацию, вы можете сделать:

-(void)textFieldDidBeginEditing:(UITextField *)textField { // This is where the keyboard becomes visible
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDuration:0.5];
        [UIView setAnimationBeginsFromCurrentState:YES];
        textField.frame = CGRectMake(textField.frame.origin.x, textField.frame.origin.y, textField.frame.size.width, textField.frame.size.height-100);
        [UIView commitAnimations];
    }

    -(void)textFieldDidEndEditing:(UITextField *)textField { // This is where the keyboard hides itself 
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDuration:0.5];
        [UIView setAnimationBeginsFromCurrentState:YES];
        textField.frame = CGRectMake(textField.frame.origin.x, textField.frame.origin.y, textField.frame.size.width, textField.frame.size.height+100);
        [UIView commitAnimations];
    }
1 голос
/ 12 января 2014

Это будет приятно прокрутить ваш UITextView к верхней части клавиатуры, когда начнется редактирование.Это также будет работать, если ваш UITextView имеет динамическую высоту (автогроу / авторазмер при наборе текста).Протестировано в iOS 7.

Вызовите метод наблюдателя клавиатуры и установите делегата UITextView для текущего класса:

- (void)viewDidLoad
{
    ...
    [self observeKeyboard];
    textView.delegate = (id)self;
}

Добавьте наблюдателя клавиатуры для UIKeyboardDidShowNotification и UIKeyboardWillShowNotification:

- (void)observeKeyboard
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
}

Получить размер клавиатуры:

- (void)keyboardWillShow:(NSNotification *)notification
{
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    _keyboardHeight = keyboardSize.height;
} 

- (void)keyboardDidShow:(NSNotification *)notification
{
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    _keyboardHeight = keyboardSize.height;
}

Когда UITextView начал редактирование или значение изменилось, вызовите scrollKeyboardToTextView:

- (void)textViewDidBeginEditing:(UITextView *)textView
{
    [self scrollKeyboardToTextView:textView];
}

- (void)textViewDidChange:(UITextView *)textView
{
    [self scrollKeyboardToTextView:textView];
}

Прокрутите UITextView с анимацией к верхней части клавиатуры:

- (void)scrollKeyboardToTextView:(UITextView *)textView
{
    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, _keyboardHeight, 0.0);
    self.scrollView.contentInset = contentInsets;
    self.scrollView.scrollIndicatorInsets = contentInsets;

    CGRect aRect = self.view.frame;
    aRect.size.height -= _keyboardHeight;
    CGPoint origin = textView.frame.origin;
    origin.y -= self.scrollView.contentOffset.y;
    origin.y += textView.frame.size.height;

    CGPoint scrollPoint = CGPointMake(0.0, textView.frame.origin.y + textView.frame.size.height - (aRect.size.height));
    [self.scrollView setContentOffset:scrollPoint animated:YES];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...