IOS - /Xcode: Wie Bewegen, Blick nach Oben, wenn die Tastatur erscheint

Gibt es viele Antworten auf diese auf, SO doch die meisten sind Jahre her und keiner scheint Recht zufriedenstellend.

Für einen login-Bildschirm mit nur drei Textfelder und submit-button, ich möchte die Ansicht zu bewegen, wenn die Tastatur erscheint einfach genug, so dass, während das Feld nicht ausgeblendet ist, tut es auch nicht nach oben aus dem Blick. Der Betrag der Bewegung erforderlich ist, dass der submit-button ist ein fester Abstand oberhalb der Tastatur. Es ist zwar möglich, indem Sie die Felder oben auf der Seite, um Platz für die Tastatur, den submit-button ist noch verborgen

Ich habe versucht, gerade das hinzufügen der folgenden:

-(void) viewWillAppear:(BOOL)Animated {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

}
- (void)viewWillDisappear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}

Damit bewegt sich die Sicht, bis ein fester Betrag, aber so viel, so dass die Felder nicht sichtbar sind, für die Bearbeitung, d.h. Sie sind zu hoch.

Anderen Antwort vorgeschlagen:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self animateTextField:textField up:YES];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self animateTextField:textField up:NO];
}

-(void)animateTextField:(UITextField*)textField up:(BOOL)up
{
    const int movementDistance = -200; //tweak as needed
    const float movementDuration = 0.3f; //tweak as needed

    int movement = (up ? movementDistance : -movementDistance);

    [UIView beginAnimations: @"animateTextField" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    [UIView commitAnimations];
}

Ich kann nicht herausfinden, wie diese umzusetzen ist. Wenn Sie nur lassen Sie es wie es ist nichts passiert. Ich denke, Sie sollen sich umbenennen textfield-Objekt mit dem Namen Ihres textfield-aber in diesem Fall, würden Sie es tun für jeden von Textfeldern? Ich kann es nicht haben keine Wirkung.

Ein weiterer Vorschlag ist der Einsatz einer Kategorie wie TPKeyboardAvoiding dies erfordert jedoch eine scrollview, die brauche ich nicht in diesem Fall.

Gibt es keine einfache Lösung in 2015 für dieses Problem?

Vielen Dank für alle Vorschläge/Beratung.

InformationsquelleAutor user1904273 | 2015-09-03

Schreibe einen Kommentar