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.
Vous devez vous connecter pour publier un commentaire.
L'animation suivante sera de déplacer votre point de vue (viewForLogin dans ce cas) 200 pixels au-dessus lorsque l'utilisateur commence à taper. La vue s'animer de retour à la position initiale lorsque le champ de texte se termine l'édition. Ne pas oublier de mettre les délégués pour les objets textfield.
Swift 3
Objective-C
SWIFT les amoureux de la
Ici vous allez. J'ai utilisé ce code avec UIView, cependant. Vous devriez être en mesure de faire les ajustements nécessaires pour le scrollview.
N'oubliez pas de supprimer les notifications au bon endroit.
DEVICE_HEIGHT
ici?