UITextField: move a visualização quando o teclado aparece
Atualmente estou trabalhando em um aplicativo para iPhone com uma única visualização, que possui vários UITextFields para entrada. Quando o teclado mostra, ele sobrepõe os campos de texto inferiores. Então eu adicionei o correspondentetextFieldDidBeginEditing:
método, para mover a vista para cima, o que funciona muito bem:
- (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];
}
}
Esse método verifica se a origem da mensagem é um dos campos de texto visíveis quando o teclado é exibido e, caso contrário, move a visualização para cima.
Eu também adicionei otextFieldDidEndEnditing:
método, que move a vista para baixo novamente (e atualiza alguns objetos do modelo de acordo com a entrada alterada):
- (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
}
No entanto, essa solução tem uma falha simples: quando termino de editar um dos campos de texto "ocultos" e toco em outro campo de texto, o teclado desaparece, a exibição desce, a vista se move novamente e o teclado reaparece.
Existe alguma possibilidade de impedir que o teclado desapareça e reapareça entre duas edições (dos campos de texto "ocultos" - de modo que a exibição só se move quando o campo de texto selecionado muda de um que seria oculto pelo teclado para um que não estaria oculto? )