J'ai des problèmes avec mon code. J'essaye de déplacer le UIScrollView
quand j'édite un UITextField
qui devrait être caché par le pop du clavier.
Je déplace le cadre principal en ce moment parce que je ne sais pas comment «faire défiler vers le haut» dans le code. Donc, j'ai fait un peu de code, cela fonctionne bien mais quand j'édite un champ UItext et que je passe à un autre UITextField
sans appuyer sur le bouton «retour», la vue principale va waaayyyyy trop haut.
J'ai fait un NSLog()
avec mes variables size, distance et textFieldRect.origin.y comme vous pouvez le voir ci-dessous. Quand j'en mets deux UITextField
au même endroit (origine y) et que je fais ce `` commutateur '' particulier (sans appuyer sur retour), j'obtiens les mêmes nombres, alors que mon code fonctionnait bien pour la première UITextField
édition mais pas pour la deuxième édition.
Regarde ça:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
{
int size;
CGRect textFieldRect = [self.view.window convertRect:textField.bounds fromView:textField];
size = textFieldRect.origin.y + textFieldRect.size.height;
if (change == FALSE)
{
size = size - distance;
}
if (size < PORTRAIT_KEYBOARD_HEIGHT)
{
distance = 0;
}
else if (size > PORTRAIT_KEYBOARD_HEIGHT)
{
distance = size - PORTRAIT_KEYBOARD_HEIGHT + 5; // +5 px for more visibility
}
NSLog(@"origin %f", textFieldRect.origin.y);
NSLog(@"size %d", size);
NSLog(@"distance %d", distance);
CGRect viewFrame = self.view.frame;
viewFrame.origin.y -= distance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
[self.view setFrame:viewFrame];
[UIView commitAnimations];
change = FALSE;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
change = TRUE;
CGRect viewFrame = self.view.frame;
viewFrame.origin.y += distance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
[self.view setFrame:viewFrame];
[UIView commitAnimations];
}
Des idées ?