Ho problemi con il mio codice. Sto cercando di spostare il UIScrollViewquando sto modificando e UITextFielddovrebbe essere nascosto dal pop della tastiera.
Sto spostando il frame principale in questo momento perché non so come "scorrere verso l'alto" nel codice. Quindi, ho fatto un po 'di codice, funziona bene, ma quando modifico un campo di testo dell'interfaccia utente e passo a un altro UITextFieldsenza premere il pulsante "Invio", la vista principale va mooolto in alto.
Ho fatto un NSLog()con le mie variabili size, distance e textFieldRect.origin.y come puoi vedere sotto. Quando ne metto due UITextFieldnello stesso punto (origine y) e faccio questo particolare 'interruttore' (senza premere Invio), ottengo gli stessi numeri, mentre il mio codice ha funzionato bene per la prima UITextFieldmodifica ma non per la seconda modifica.
Controllalo:
- (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];
}
Qualche idea ?
