UITextField: przesuń widok, gdy pojawi się klawiatura

Obecnie pracuję nad aplikacją iPhone'a z pojedynczym widokiem, który ma wiele UITextFields do wprowadzenia. Gdy klawiatura pokazuje, nakłada dolne pola tekstowe. Dodałem więc odpowiednitextFieldDidBeginEditing: metoda, aby przenieść widok w górę, która działa świetnie:

- (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];      
    }
}

Ta metoda sprawdza, czy źródłem wiadomości jest jedno z pól tekstowych, które są widoczne po wyświetleniu klawiatury, a jeśli nie, przesuwa widok w górę.

Dodałem takżetextFieldDidEndEnditing: metoda, która ponownie przesuwa widok (i aktualizuje niektóre obiekty modelu zgodnie ze zmienionym wejściem):

- (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
}

Jednak to rozwiązanie ma prostą wadę: kiedy zakończę edycję jednego z „ukrytych” pól tekstowych i dotknę innego pola tekstowego, klawiatura zniknie, widok przesunie się w dół, widok przesunie się ponownie i pojawi się ponownie klawiatura.

Czy istnieje możliwość zatrzymania klawiatury przed zniknięciem i ponownym pojawieniem się między dwiema edycjami („ukrytych” pól tekstowych - aby widok poruszał się tylko wtedy, gdy wybrane pole tekstowe zmienia się z tego, które byłoby ukryte przez klawiaturę, na takie, które nie byłoby ukryte) )?

questionAnswers(6)

yourAnswerToTheQuestion