iPhone - Как мне прокрутить UITextField и изменить его размер при появлении клавиатуры - PullRequest
3 голосов
/ 26 января 2011

У меня есть UIScrollView, внутри которого у меня есть UITextField и UITextView. Я хочу, чтобы клавиатура скрывала поле, над которым мы работаем. Если мой пользователь нажмет на TextField, я хочу, чтобы он прокрутился до верхней части экрана. Если мой пользователь нажмет на TextView, я хочу, чтобы он изменил размер в пустое место слева на верхней части клавиатуры. Моя клавиатура имеет вспомогательный вид (панель инструментов).

Пока я ловлю уведомление UIKeyboardWillShowNotification и использую этот код, который на самом деле не работает (текстовое представление изменено, но все еще за клавиатурой): Этот код хорошо работал, когда у меня не было UIScrollView.

- (void)keyboardWillShow:(NSNotification *)notification {

    if ([self.noteView isFirstResponder] == NO) return;

    /*
     Reduce the size of the text view so that it's not obscured by the keyboard.
     Animate the resize so that it's in sync with the appearance of the keyboard.
     */

    NSDictionary *userInfo = [notification userInfo];
    NSValue* aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];                            // Get the origin of the keyboard when it's displayed.
    NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];   // Get the duration of the animation.

    // Get the top of the keyboard as the y coordinate of its origin in self's view's coordinate system. The bottom of the text view's frame should align with the top of the keyboard's final position.
    CGRect keyboardRect = [aValue CGRectValue];
    keyboardRect = [self.view convertRect:keyboardRect fromView:nil];

    CGFloat keyboardTop = keyboardRect.origin.y;
    CGRect newTextViewFrame = self.view.bounds;
    newTextViewFrame.size.height = keyboardTop - self.view.frame.origin.y; // Using bounds here does not help

    NSTimeInterval animationDuration;
    [animationDurationValue getValue:&animationDuration];

    // Animate the resize of the text view's frame in sync with the keyboard's appearance.
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:animationDuration];

     self.noteView.frame = newTextViewFrame;

    [UIView commitAnimations];
}

Не могли бы вы помочь мне:

  • сделать эту работу для просмотра текста?

  • заставить Textview вернуться в исходное положение?

  • Как мне сделать прокрутку TextField без какой-либо функции изменения размера?

Спасибо

1 Ответ

0 голосов
/ 26 января 2011

Не могли бы вы просто программно прокрутить uiscrollview, используя это:

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated

Не уверен, будет ли это работать для вашего приложения или нет.

...