In diesem iOS SDK-Anfänger-Tutorial erfahren Sie, wie Sie eine einfache Benutzeroberfläche erstellen, die aus einem Benutzernamen und einem Kennwort besteht UITextField
. Wir werden sowohl das Hinzufügen von Textfeldern im Interface Builder als auch das programmgesteuerte Erstellen von Textfeldern behandeln. Zusätzlich werden wir das erkunden UITextFieldDelegate
Protokollmethoden und demonstrieren einige praktische Techniken für die Arbeit mit Benutzereingaben.
Das Erstellen von Elementen wie einem Textfeld kann auf zwei verschiedene Arten erfolgen. Sie können es im Interface Builder erstellen oder programmgesteuert selbst programmieren. Das Erstellen eines Elements in Interface Builder ist zwar bequemer, aber viele Programmierer ziehen es vor, Elemente programmgesteuert zu erstellen. In diesem Lernprogramm werden beide Optionen kurz erläutert.
Starten Sie Xcode und klicken Sie auf Datei> Neu> Projekt. Klicken Sie links im iOS-Bereich auf "Anwendung". Klicken Sie auf das Symbol "Single View Application" und klicken Sie auf "Next".
Geben Sie im Feld "Produktname" "TextFieldARC" ein und geben Sie einen Namen für Ihre Firmenkennung ein, z. B. "com.companyName". Wählen Sie "iPhone" aus dem Menü "Gerätefamilie". Deaktivieren Sie "Use Storyboards" und "Unit-Tests einbeziehen", und aktivieren Sie "Automatische Referenzzählung verwenden", bevor Sie auf "Weiter" klicken. Wählen Sie einen Speicherort für das Projekt aus und klicken Sie auf "Erstellen".
UITextField
Klicken Sie auf die Datei "ViewController.m" und geben Sie den folgenden Code in das viewDidLoad
Methode.
CGRect passwordTextFieldFrame = CGRectMake (20.0f, 100.0f, 280.0f, 31.0f); UITextField * passwordTextField = [[Zuweisung durch UITextField] initWithFrame: passwordTextFieldFrame]; passwordTextField.placeholder = @ "Passwort"; passwordTextField.backgroundColor = [UIColor whiteColor]; passwordTextField.textColor = [UIColor blackColor]; passwordTextField.font = [UIFont systemFontOfSize: 14.0f]; passwordTextField.borderStyle = UITextBorderStyleRoundedRect; passwordTextField.clearButtonMode = UITextFieldViewModeWhileEditing; passwordTextField.returnKeyType = UIReturnKeyDone; passwordTextField.textAlignment = UITextAlignmentLeft; passwordTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; passwordTextField.tag = 2; passwordTextField.autocapitalizationType = UITextAutocapitalizationTypeNone; [self.view addSubview: passwordTextField];
Beachten Sie, dass die Tag-Eigenschaft des Textfelds auf "2" gesetzt ist. Das Festlegen der Tag-Eigenschaft ist eine Möglichkeit, um zu verfolgen, welches Textfeld in Ihrem Programm aktiv ist.
Klicken Sie im "Navigator" -Feld Ihres Xcode-Projekts auf die Datei "ViewController.xib". Klicken Sie links im Bereich "Dokumentumriss" auf "Ansicht". Klicken Sie auf Ansicht> Dienstprogramme> Objektbibliothek anzeigen. Scrollen Sie durch die Objektbibliothek in der linken unteren Ecke, bis Sie ein Objekt "Textfeld" finden. Klicken Sie darauf, um es auszuwählen, und ziehen Sie das Textfeld dann in die Ansicht.
Passen Sie das Textfeld so an, dass es sich am oberen Rand der Ansicht erstreckt. Klicken Sie bei ausgewähltem Textfeld auf Ansicht> Dienstprogramme> Inspector für Attribute anzeigen. Suchen Sie im Bereich "Attribute" unter "Textfeld" nach dem Feld "Platzhalter" und ändern Sie es in "Benutzername". Klicken Sie auf das Dropdown-Menü "Schaltfläche löschen" und wählen Sie "Wird beim Bearbeiten angezeigt". Klicken Sie auf das Dropdown-Feld "Return Key" und wählen Sie "Next". Blättern Sie schließlich zum Feld "Tag" unter "Ansicht" und ändern Sie es in "1". Klicken Sie auf Datei> Speichern.
Wenn Sie Ihr Programm jetzt ausführen, sollten Sie eine UITextField
Objekt auf dem Bildschirm, das Eingaben empfangen kann! Auf den Wert des Objekts können Sie mit zugreifen Text
Eigenschaft (d. h. passwordTextField.text).
Die Verwendung des Textfelds an diesem Punkt stellt jedoch ein bemerkenswertes Problem dar. Es gibt keine Standardmethode zum Entfernen der Tastatur aus der Ansicht. Also für unseren nächsten Trick…
Das Zurücksetzen der Tastatur bei Berühren des Hintergrunds kann auf verschiedene Arten erfolgen. Der folgende Code ist ein Beispiel für eine Technik. Klicken Sie auf die Datei "ViewController.m" und fügen Sie die folgende Methodenimplementierung hinzu:
- (void) touchesBegan: (NSSet *) berührt withEvent: (UIEvent *) -Ereignis NSLog (@ "touchesBegan: withEvent:"); [self.view endEditing: YES]; [super berührtBegan: berührt withEvent: event];
Führen Sie das Projekt erneut aus, und Sie sollten die Tastatur jetzt einfach durch Tippen auf den Bildschirm schließen können.
Delegierung ist ein Entwurfsmuster, mit dem im Wesentlichen zwei Objekte miteinander kommunizieren können. EIN UITextField
Objektnachrichten die entsprechenden UITextFieldDelegate
Methode, wenn bestimmte Ereignisse auftreten, z. B. wenn das Textfeld mit der Bearbeitung beginnt. Wenn eine Nachricht an eine der Methoden gesendet wird, haben Sie die Möglichkeit, angepasste Aktionen auszuführen. Das Objekt, das die Delegatnachrichten empfängt, kann in diesem Fall ein beliebiges Objekt sein, das dem Delegatprotokoll entspricht UITextFieldDelegate
. Im allgemeinsten Fall erhält das Objekt jedoch die UITextField
Delegierte Nachrichten werden gleich sein UIViewController
Objekt, das das enthält UITextField
als Unteransicht.
Klicken Sie auf die Datei "ViewController.m". In dem viewDidLoad
Wenn Sie das Textfeld oben programmgesteuert erstellt haben, fügen Sie den folgenden Code hinzu:
passwordTextField.delegate = self; // DIESE LINIE HINZUFÜGEN [self.view addSubview: passwordTextField];
Durch die Einstellung der Textfeld
Eigentum an delegieren selbst
, das ViewController
Objekt wird zum Delegat des Textfelds und kann das implementieren UITextFieldDelegate
Methoden.
Um den Delegaten für das im Interface Builder erstellte Textfeld festzulegen, klicken Sie auf "ViewController.xib". Klicken Sie in der Ansicht auf das Textfeld und dann auf Ansicht> Dienstprogramme> Verbindungsinspektor anzeigen. Suchen Sie unter "Outlets" im Bereich "Connections Inspector" auf der rechten Seite nach "Delegate". Klicken Sie auf den Kreis neben ihm und ziehen Sie ihn per Drag & Drop auf "Dateieigentümer" im linken Bereich "Dokumentumriss". Dadurch wird das Textfeld so verdrahtet, dass die ViewController
Objekt wird als Delegat des Textfelds festgelegt. Klicken Sie auf Datei> Speichern.
Klicken Sie schließlich auf "ViewController.h" und geben Sie den folgenden Code ein, um die Klasse an die anzupassen UITextFieldDelegate
Protokoll:
@Interface ViewController: UIViewController
Folgende UITextFieldDelegate
Protokollmethoden sind alle optional, dh sie müssen nicht vom Delegierten implementiert werden. Wir werden sie jedoch alle implementieren, um mehr über sie zu erfahren. Lassen Sie uns die Methoden diskutieren, während wir sie eintippen.
textFieldShouldBeginEditing:
und textFieldDidBeginEditing:
Klicken Sie auf "ViewController.m" und fügen Sie den folgenden Code hinzu.
- (BOOL) textFieldShouldBeginEditing: (UITextField *) textField NSLog (@ "textFieldShouldBeginEditing"); textField.backgroundColor = [UIColor colorWithRed: 220.0f / 255.0f grün: 220.0f / 255.0f blau: 220.0f / 255.0f alpha: 1.0f]; JA zurückgeben; - (void) textFieldDidBeginEditing: (UITextField *) textField NSLog (@ "textFieldDidBeginEditing");
textFieldShouldBeginEditing:
wird genannt kurz bevor Das Textfeld wird aktiv. Dies ist ein guter Ort, um das Verhalten Ihrer Anwendung anzupassen. In diesem Fall ändert sich die Hintergrundfarbe des Textfelds, wenn diese Methode aufgerufen wird, um anzuzeigen, dass das Textfeld aktiv ist. textFieldDidBeginEditing:
wird genannt wann Das Textfeld wird aktiv.
textFieldShouldEndEditing:
und textFieldDidEndEditing:
Fügen Sie den folgenden Code unter den vorherigen Methoden hinzu.
- (BOOL) textFieldShouldEndEditing: (UITextField *) textField NSLog (@ "textFieldShouldEndEditing"); textField.backgroundColor = [UIColor whiteColor]; JA zurückgeben; - (void) textFieldDidEndEditing: (UITextField *) textField NSLog (@ "textFieldDidEndEditing");
Diese beiden Methoden ähneln den Methoden, die aufgerufen werden, wenn das Textfeld mit der Bearbeitung beginnt. textFieldShouldEndEditing:
wird genannt kurz bevor das Textfeld wird inaktiv und textFieldDidEndEditing:
wird genannt wann Das Textfeld wird inaktiv. Innerhalb textFieldShouldEndEditing:
, Die Hintergrundfarbe wird wieder in Weiß geändert, sodass das Textfeld wieder seine ursprüngliche Farbe annehmen kann. Mit diesen Methoden haben Sie erneut die Möglichkeit, das Verhalten der Anwendung anzupassen, wenn das Textfeld inaktiv wird.
textField: shouldChangeCharactersInRange: replacementString
Fügen Sie den folgenden Code unter den vorherigen Methoden hinzu.
- (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) range replacementString: (NSString *) Zeichenfolge NSLog (@ "textField: shouldChangeCharactersInRange: replacementString:"); if ([string isEqualToString: @ "#"]) return NO; else return YES;
textFieldShouldChangeCharactersInRange: replacementString:
wird jedes Mal aufgerufen, wenn der Benutzer ein Zeichen auf der Tastatur eingibt. Tatsächlich wird diese Methode aufgerufen, bevor ein Zeichen angezeigt wird. Wenn Sie bestimmte Zeichen aus einem Textfeld einschränken möchten, ist dies die Methode für Sie. Wie Sie in unserem Beispiel sehen können, haben wir eine Logik hinzugefügt, um das "#" - Symbol zu verbieten.
textFieldShouldClear:
Fügen Sie den folgenden Code unter den vorherigen Methoden hinzu.
- (BOOL) textFieldShouldClear: (UITextField *) textField NSLog (@ "textFieldShouldClear:"); JA zurückgeben;
textFieldShouldClear:
wird aufgerufen, wenn der Benutzer die Löschtaste drückt, das graue "x" im Textfeld. Bevor das aktive Textfeld gelöscht wird, können Sie mit dieser Methode die erforderlichen Anpassungen vornehmen.
textFieldShouldReturn:
Fügen Sie den folgenden Code unter den vorherigen Methoden hinzu.
- (BOOL) textFieldShouldReturn: (UITextField *) textField NSLog (@ "textFieldShouldReturn:"); if (textField.tag == 1) UITextField * passwordTextField = (UITextField *) [self.view viewWithTag: 2]; [passwordTextField becomeFirstResponder]; else [textField resignFirstResponder]; JA zurückgeben;
textFieldShouldReturn:
wird aufgerufen, wenn der Benutzer die Eingabetaste auf der Tastatur drückt. In dem Beispiel ermitteln wir anhand der Tag-Eigenschaft, welches Textfeld aktiv ist. Wenn das Textfeld "Benutzername" aktiv ist, sollte stattdessen das nächste Textfeld "Passwort" aktiviert werden. Wenn das Textfeld "Passwort" aktiv ist, sollte "Passwort" zurücktreten, und die Tastatur wird neu eingegeben.
Klicken Sie auf Erstellen> Ausführen oder klicken Sie auf den Pfeil "Ausführen" in der oberen linken Ecke. Spielen Sie bei geöffneter Konsole mit den Textfeldern. Das NSLog
Die früheren Delegate-Protokollmethoden helfen, die Umstände zu ermitteln, unter denen die einzelnen Delegatenmethoden aufgerufen werden.
Das UITextFieldDelegate
Protokollmethoden bieten eine großartige Möglichkeit, das Verhalten von a anzupassen UITextField
. Dieses Tutorial konzentriert sich auf einige der häufigsten Aufgaben im Zusammenhang mit UITextField
, B. die Tastatur neu eingeben und zum nächsten Textfeld wechseln, aber die Möglichkeiten zur Anpassung des Verhaltens sind unbegrenzt. Wenn Sie erst einmal mit dem Entwurfsmuster für Delegaten vertraut sind, können Sie leichter zu anderen vorgefertigten Objekten verzweigen, die Delegaten verwenden, wie z UITableView
oder UIScrollView
. Behalte deinen alten Kumpel NSLog
In Ihrer Hosentasche, wenn Sie andere Delegierte erforschen, wird dies Ihnen helfen, die inneren Abläufe des Delegierten zu verstehen.