UITextField: переместить вид при появлении клавиатуры

В настоящее время я работаю над приложением для iPhone с одним представлением, которое имеет несколько UITextFields для ввода. Когда клавиатура отображается, она перекрывает нижние текстовые поля. Поэтому я добавил соответствующийtextFieldDidBeginEditing: метод, чтобы переместить вид вверх, который прекрасно работает:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    if ( ( textField != inputAmount ) && ( textField != inputAge ) ) {
        NSTimeInterval animationDuration = 0.300000011920929;
        CGRect frame = self.view.frame;
        frame.origin.y -= kOFFSET_FOR_KEYBOARD;
        frame.size.height += kOFFSET_FOR_KEYBOARD;
        [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
        [UIView setAnimationDuration:animationDuration];
        self.view.frame = frame;
        [UIView commitAnimations];      
    }
}

Этот метод проверяет, является ли источником сообщения одно из текстовых полей, видимых при отображении клавиатуры, и, если нет, перемещает представление вверх.

Я также добавилtextFieldDidEndEnditing: метод, который снова перемещает представление вниз (и обновляет некоторые объекты модели в соответствии с измененным вводом):

- (void)textFieldDidEndEditing:(UITextField *)textField {
    if ( ( textField != inputMenge ) && ( textField != inputAlter ) ) {
        NSTimeInterval animationDuration = 0.300000011920929;
        CGRect frame = self.view.frame;
        frame.origin.y += kOFFSET_FOR_KEYBOARD;
        frame.size.height -= kOFFSET_FOR_KEYBOARD;
        [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
        [UIView setAnimationDuration:animationDuration];
        self.view.frame = frame;
        [UIView commitAnimations];      
    }
    // Additional Code
}

Однако у этого решения есть простой недостаток: когда я заканчиваю редактировать одно из «скрытых» текстовых полей и касаюсь другого текстового поля, клавиатура исчезает, вид перемещается вниз, вид снова поднимается и клавиатура снова появляется.

Есть ли возможность предотвратить исчезновение и повторное появление клавиатуры между двумя правками («скрытых» текстовых полей), чтобы представление перемещалось только тогда, когда выбранное текстовое поле изменится с того, которое будет скрыто клавиатурой, на то, которое не будет скрыто )?

Ответы на вопрос(6)

Ваш ответ на вопрос