UITextField: Ansicht verschieben, wenn die Tastatur angezeigt wird
Ich arbeite derzeit an einer iPhone-Anwendung mit einer einzigen Ansicht, die mehrere UITextFields für die Eingabe enthält. Wenn die Tastatur angezeigt wird, werden die unteren Textfelder überlagert. Also habe ich das entsprechende hinzugefügttextFieldDidBeginEditing:
Methode, um die Ansicht nach oben zu verschieben, was sehr gut funktioniert:
- (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];
}
}
Diese Methode prüft, ob die Quelle der Nachricht eines der Textfelder ist, die sichtbar sind, wenn die Tastatur angezeigt wird. Andernfalls wird die Ansicht nach oben verschoben.
Ich habe auch dietextFieldDidEndEnditing:
Methode, die die Ansicht wieder nach unten verschiebt (und einige Modellobjekte entsprechend der geänderten Eingabe aktualisiert):
- (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
}
Diese Lösung hat jedoch einen einfachen Fehler: Wenn ich eines der "verborgenen" Textfelder fertig bearbeite und ein anderes berühre, verschwindet die Tastatur, die Ansicht wird nach unten verschoben, die Ansicht wird wieder nach oben verschoben und die Tastatur wird wieder angezeigt.
Gibt es eine Möglichkeit, zu verhindern, dass die Tastatur zwischen zwei Bearbeitungen (der "verborgenen" Textfelder) verschwindet und wieder angezeigt wird, sodass die Ansicht nur verschoben wird, wenn sich das ausgewählte Textfeld von einem von der Tastatur ausgeblendeten zu einem nicht ausgeblendeten Textfeld ändert )?