IOS/Xcode: Comment faire pour Déplacer la Vue vers le Haut lorsque le Clavier apparaît

Il y a beaucoup de réponses sur ce sur DONC, mais la plupart sont de ans et aucun ne semble tout à fait satisfaisant.

Pour un écran de connexion avec seulement trois objets textfield et le bouton de validation, je veux la vue à déplacer vers le haut quand le clavier s'affiche juste assez de sorte que, si le champ n'est pas caché, il n'y a pas de déplacer vers le haut hors de la vue. La quantité de mouvement nécessaire est telle que le bouton submit est une distance fixe au-dessus du clavier. Alors qu'il est possible en déplaçant les champs en haut de la page pour laisser de la place pour le clavier, le bouton envoyer est toujours caché

J'ai essayé tout à l'adjonction de ce qui suit:

-(void) viewWillAppear:(BOOL)Animated {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

}
- (void)viewWillDisappear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}

Cela déplace le point de vue d'un montant fixe, mais de telle sorte que les champs ne sont pas visibles pour l'édition, c'est à dire qu'ils sont trop haut.

De l'autre AFIN de répondre suggéré:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self animateTextField:textField up:YES];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self animateTextField:textField up:NO];
}

-(void)animateTextField:(UITextField*)textField up:(BOOL)up
{
    const int movementDistance = -200; //tweak as needed
    const float movementDuration = 0.3f; //tweak as needed

    int movement = (up ? movementDistance : -movementDistance);

    [UIView beginAnimations: @"animateTextField" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    [UIView commitAnimations];
}

Je ne peux pas comprendre comment le mettre en œuvre. Si vous venez de le laisser comme il est, rien ne se passe. Je suppose que vous êtes censé pour renommer champ de texte avec le nom de votre textfield mais dans ce cas, voulez-vous le faire pour chacun des objets textfield? Je ne peux pas obtenir qu'il ait un quelconque effet.

Une autre suggestion est d'utiliser une catégorie telle que TPKeyboardAvoiding toutefois, cela exige une scrollview que je n'ai pas besoin dans ce cas.

Est-il pas de solution simple en 2015 pour ce problème?

Merci pour toutes les suggestions/conseils.

InformationsquelleAutor user1904273 | 2015-09-03