iOS SDK Halten Sie Inhalte von der Tastatur fern

Manchmal muss der Formularinhalt den gesamten iOS-Bildschirm ausfüllen. Was machen Sie also, wenn die Tastatur Ihr UITextField oder UITextView abdeckt? In diesem kurzen Tipp werde ich zeigen, wie Sie mithilfe von UIScrollView verhindern, dass Formularinhalte verborgen werden, wenn die Tastatur angezeigt wird.

Laut der offiziellen Apple-Dokumentation ist der beste Weg, eine vertikal gestapelte Liste von zu kontrollieren UITextField Objekte, die durch eine Tastatur verdeckt werden können, sind das Einbetten in eine UIScrollView Objekt. Wenn die Tastatur angezeigt wird, a UIKeyboardDidShowNotification wird gesendet und kann zum Anpassen der angezeigten Textfelder verwendet werden. Wenn Sie diese Nachricht überfüllen, müssen Sie die folgenden drei Schritte ausführen:

    яя я
  1. Bestimmen Sie die Tastaturgröße.
  2. Aktualisieren Sie den unteren Inhaltseintrag der Inhaltsscrollansicht um die Höhe der Tastatur.
  3. Scrollen Sie den Zielinhalt in die Ansicht.

Registrieren Sie Tastaturbeobachter

Zunächst müssen wir zwei Beobachter für die Tastaturbenachrichtigungen registrieren. Eine für die UIKeyboardDidShowNotification und eine für die UIKeyboardWillHideNotification. Wir machen das im viewDidLoad: werden die Beobachter registriert, wenn die Ansicht geladen wird. Sie können die Beobachter mit folgendem Code hinzufügen:

 [[NSNotificationCenter defaultCenter] addObserver: Selbstauswahl: @selector (keyboardWasShown :) Name: UIKeyboardDidShowNotification-Objekt: nil]; [[NSNotificationCenter defaultCenter] addObserver: Selbstauswahl: @selector (keyboardWillHide :) Name: UIKeyboardWillHideNotification-Objekt: nil];

Wenn Sie einen Beobachter im registrieren viewDidLoad: Methode, sollten Sie es auch in entfernen viewDidUnload: und das Dealloc: Methoden. Fügen Sie den beiden folgenden Methoden den folgenden Code hinzu:

 [[NSNotificationCenter defaultCenter] removeObserver: self];

Fügen Sie die KeyboardWasShown-Methode hinzu

Das keyboardWasShown: Methode reagiert auf die UIKeyboardDidShowNotification: Benachrichtigung. Bei dieser Methode werden die drei von Apple empfohlenen Schritte zum Verschieben des Inhalts implementiert. Fügen Sie Ihrem Projekt den folgenden Code hinzu:

 - (void) keyboardWasShown: (NSNotification *) Benachrichtigung // Schritt 1: Ermitteln Sie die Größe der Tastatur. CGSize keyboardSize = [[[Benachrichtigungsbenutzerinfo] objectForKey: UIKeyboardFrameBeginUserInfoKey] CGRectValue] .size; // Schritt 2: Passen Sie den unteren Inhaltseintrag Ihrer Bildlaufansicht um die Höhe der Tastatur an. UIEdgeInsets contentInsets = UIEdgeInsetsMake (0.0, 0.0, keyboardSize.height, 0.0); theScrollView.contentInset = contentInsets; theScrollView.scrollIndicatorInsets = contentInsets; // Schritt 3: Scrollen Sie das Zieltextfeld in die Ansicht. CGRect aRect = self.view.frame; aRect.size.height - = keyboardSize.height; if (! CGRectContainsPoint (aRect, activeTextField.frame.origin)) CGPoint scrollPoint = CGPointMake (0.0, activeTextField.frame.origin.y - (keyboardSize.height-15)); [theScrollView setContentOffset: scrollPoint animated: YES]; 

Im ersten Schritt erhalten wir die Größe der Tastatur. Im zweiten Schritt passen wir den unteren Inhalt der Bildlaufansicht um die Tastaturhöhe an. Im dritten und letzten Schritt erstellen wir zuerst ein neues Rechteck mit der Höhe des Bildschirms minus der Höhe der Tastatur. Dann prüfen wir, ob sich das aktive Textfeld unter der Tastatur befindet. Wenn es sich nicht unter der Tastatur befindet, wird der Inhaltsoffset nicht von der Bildlaufansicht aktualisiert. Wenn sich das aktive Textfeld unter der Tastatur befindet, aktualisieren wir den Inhaltsversatz der Bildlaufansicht. Ich habe (keyboardSize.height-15) verwendet, sodass sich das aktive Textfeld nicht direkt über dem Textfeld befindet, sondern einen zusätzlichen Abstand von 15 Pixeln hat. activeTextField ist eine benutzerdefinierte Variable, die das aktive Feld speichert.

Fügen Sie die KeyboardWillHide-Methode hinzu

Wir müssen auch das hinzufügen keyboardWillHide: Methode, die auf die reagiert UIKeyboardWillHideNotification. Fügen Sie Ihrem Projekt den folgenden Code hinzu:

 - (void) keyboardWillHide: (NSNotification *) Benachrichtigung UIEdgeInsets contentInsets = UIEdgeInsetsZero; theScrollView.contentInset = contentInsets; theScrollView.scrollIndicatorInsets = contentInsets; 

Hier setzen wir die contentInset und das scrollIndicatorInsets von der Bildlaufansicht zu UIEdgeInsetsZero, es wird also kein Inhaltsinsert mehr geben.

Verfolgung des aktiven UITextFields

Mit diesen Methoden verfolgen wir das aktive Textfeld:

 - (void) textFieldDidBeginEditing: (UITextField *) textField self.activeTextField = textField;  - (void) textFieldDidEndEditing: (UITextField *) textField self.activeTextField = nil; 

Wenn wir mit der Bearbeitung beginnen activeTextField: Variable wird auf das aktive Feld gesetzt. Wenn wir die Bearbeitung beenden, wird die activeTextField:Variable ist auf Null gesetzt. Beachten Sie, dass wir das deklariert haben activeTextField Eigentum mit (nichtatomisch, zuordnen), Daher wird der Retain-Count für das aktive Textfeld durch unsere Zuweisung nie inkrementiert.

Schließen Sie die Tastatur ab

Fügen Sie diesen Code hinzu, um die Tastatur zu schließen:

 - (IBAction) dismissKeyboard: (id) Sender [activeTextField resignFirstResponder]; 

Diese Aktion hatte didEndOnExit als Ereignistyp, wenn Sie also die Taste drücken Rückkehr Taste wird die Tastatur verworfen. Sie müssen diese Aktion mit jedem Textfeld verknüpfen. Verbinden Sie auch den Delegaten von jedem Textfeld mit Eigentümer der Datei.

Einpacken

Vielen Dank, dass Sie diesen kurzen Tipp zum Verschieben von Inhalten unter der Tastatur gelesen haben. Wenn Sie Fragen oder Kommentare zu diesem Tutorial haben, lassen Sie sie in den Kommentaren weiter unten!