Перемещение UIScrollView, когда клавиатура встает на место

[Изменить:] Проблема решена. У меня не было моих делегатов, связанных должным образом в UIBuilder. Код хороший!

Я пытаюсь изменить размер прокрутки, когда появляется клавиатура. Я пошел в документы разработчика и нашел эту информацию.

http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//apple_ref/doc/uid/TP40009542-CH5-SW1

Слева "Управление клавиатурой".

В документации он показывает немного кода для определения размера клавиатуры, а затем для изменения размера UIScrollView. Я разместил сообщение NSLog в коде для функции - (void)keyboardWasShown:(NSNotification*)aNotification, поэтому я вижу, что функция фактически вызывается, но когда я пытаюсь NSLog kbSize.height, она всегда оценивается в 0.

Почему код, который apple для этой цели не работает?

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
    scrollView.contentInset = contentInsets;
    scrollView.scrollIndicatorInsets = contentInsets;

    // If active text field is hidden by keyboard, scroll it so it visible
    // Your application might not need or want this behavior.
    CGRect aRect = self.view.frame;
    aRect.size.height -= kbSize.height;
    if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
        CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
        [scrollView setContentOffset:scrollPoint animated:YES];
    }
}

Ответы

Ответ 1

Возможно, вы захотите попробовать рекомендуемый "TPKeyboardAvoidingScrollView", доступный по адресу: https://github.com/michaeltyson/TPKeyboardAvoiding

Работает как шарм...

Ответ 2

Вы когда-нибудь добавляли наблюдателя для этого конкретного уведомления? Убедитесь, что в вашем методе loadView вы выполните следующее:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];

Не забудьте отменить регистрацию наблюдателя на методе viewDidUnload следующим образом:

[[NSNotificationCenter defaultCenter] removeObserver:self];

Сообщите мне, если это сработает!

Ответ 4

Одним из простых решений является добавление расширения UIViewController + Keyboard.swift в ваш проект с помощью одной строки

setupKeyboardNotifcationListenerForScrollView(scrollView)

он автоматически изменит размер автоматически при появлении клавиатуры. Не нужно ничего подклассифицировать, просто расширение! Его доступно в GitHub SingleLineKeyboardResize