UITextField: déplacer la vue lorsque le clavier apparaît

Je suis actuellement en train de travailler sur une application iPhone avec un seul point de vue, qui a de multiples UITextFields pour l'entrée. Lorsque le clavier montre, il se superpose à la partie inférieure textfields. J'ai donc ajouté le textFieldDidBeginEditing: méthode, pour déplacer la vue vers le haut, qui fonctionne très bien:

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

Cette méthode vérifie si la source du message est l'un des objets textfield qui sont visibles lorsque le clavier montre, et si non, il se déplace le point de vue.

J'ai aussi ajouté le textFieldDidEndEnditing: méthode, qui permet de déplacer la vue vers le bas à nouveau (et mise à jour de certains objets de modèle en fonction de l'évolution de l'entrée):

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

Cependant, cette solution présente des défauts simple: Quand j'ai fini d'éditer l'un des "caché" textfields et touchez un autre champ de texte, le clavier disparaît, la vue se déplace vers le bas, la vue se déplace de nouveau et le clavier s'affiche à nouveau.

Est-il possible de garder le clavier de disparaître et de réapparaître entre deux vérifications (de la "caché" textfields - pour que la vue ne se déplace que lorsque le textfield les changements d'un qui serait masquée par le clavier pour un qui n'aurait pas caché)?

InformationsquelleAutor ComSubVie | 2009-11-21