UITextField: przesuń widok, gdy pojawi się klawiatura
Obecnie pracuję nad aplikacją iPhone'a z pojedynczym widokiem, który ma wiele UITextFields do wprowadzenia. Gdy klawiatura pokazuje, nakłada dolne pola tekstowe. Dodałem więc odpowiednitextFieldDidBeginEditing:
metoda, aby przenieść widok w górę, która działa świetnie:
- (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];
}
}
Ta metoda sprawdza, czy źródłem wiadomości jest jedno z pól tekstowych, które są widoczne po wyświetleniu klawiatury, a jeśli nie, przesuwa widok w górę.
Dodałem takżetextFieldDidEndEnditing:
metoda, która ponownie przesuwa widok (i aktualizuje niektóre obiekty modelu zgodnie ze zmienionym wejściem):
- (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
}
Jednak to rozwiązanie ma prostą wadę: kiedy zakończę edycję jednego z „ukrytych” pól tekstowych i dotknę innego pola tekstowego, klawiatura zniknie, widok przesunie się w dół, widok przesunie się ponownie i pojawi się ponownie klawiatura.
Czy istnieje możliwość zatrzymania klawiatury przed zniknięciem i ponownym pojawieniem się między dwiema edycjami („ukrytych” pól tekstowych - aby widok poruszał się tylko wtedy, gdy wybrane pole tekstowe zmienia się z tego, które byłoby ukryte przez klawiaturę, na takie, które nie byłoby ukryte) )?