iOS SDK UITextView & UITextViewDelegate

In diesem iOS SDK Basics-Tutorial erstellen wir ein UITextView, implementiere das UITextViewDelegate Protokollmethoden und Verwendung NSLog um zu sehen, wann die Methoden aufgerufen werden. Wir werden auch darauf eingehen, wie Sie die Anzahl der Zeichen in einer Textansicht begrenzen können und wie Sie die Eingabetaste zum Zurücksetzen der Tastatur verwenden. Lesen Sie weiter, um zu erfahren, wie Sie diese Funktionen in Ihrer Anwendung implementieren!


Schritt 1: Erstellen Sie ein neues Xcode-Projekt

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" "TextViewARC" 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".

Geben Sie im Feld "Produktname" "TextViewARC" ein und geben Sie einen Namen für Ihre Firmenkennung ein, beispielsweise "com.companyName". Wählen Sie "iPhone" aus dem Menü "Gerätefamilie". Deaktivieren Sie "Use Storyboards" und "Unit-Tests einbeziehen" und aktivieren Sie die Option "Automatische Referenzzählung verwenden", bevor Sie auf "Weiter" klicken. Wählen Sie einen Speicherort für das Projekt aus und klicken Sie auf "Erstellen".


Schritt 2: Erstellen eines UITextView

Ein UITextView-Objekt kann entweder programmgesteuert (d. H. Im Code) oder grafisch mit dem Interface Builder-Tool erstellt werden. In diesem Lernprogramm wird kurz beschrieben, wie das Objekt mit beiden Methoden erstellt wird.

Programmatisch

Klicken Sie auf die Datei "ViewController.m" und geben Sie den folgenden Code ein.

 CGRect textViewFrame = CGRectMake (20.0f, 20.0f, 280.0f, 124.0f); UITextView * textView = [[UITextView-Zuordnung] initWithFrame: textViewFrame]; textView.returnKeyType = UIReturnKeyDone; [self.view addSubview: textView];

Dies erstellt programmgesteuert eine UITextView Objekt und fügt es der Ansicht des hinzu ViewController.

Mit Interface Builder

Alternativ können Sie auch eine erstellen UITextView in der .xib-Datei. Beginnen Sie mit einem Klick auf die .xib-Datei im Bereich "Navigator" Ihres Xcode-Fensters. Klicken Sie links im Bereich "Dokumententwurf" auf "Anzeigen". Klicken Sie auf Ansicht> Dienstprogramme> Objektbibliothek anzeigen. Scrollen Sie durch die Objektbibliothek in der linken unteren Ecke, bis Sie ein Objekt "Textansicht" finden. Klicken Sie, um es auszuwählen, und ziehen Sie die Textansicht per Drag & Drop in die Ansicht. Passen Sie die Textansicht so an, dass sie sich im oberen Bereich der Ansicht befindet und etwa 125 Pixel groß ist.


Schritt 3: Entfernen der Tastatur

Das Zurücksetzen der Tastatur bei Berühren des Hintergrunds kann auf verschiedene Arten erfolgen. Der folgende Code ist ein Beispiel für eine solche 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]; 

Schritt 4: Delegieren Sie Protokollmethoden

Einfach gesagt, ein Delegat hilft zwei Objekten bei der Kommunikation miteinander. Im Falle der UITextViewDelegate Methoden, die UITextView kann die Delegatmethoden benachrichtigen, wenn bestimmte Ereignisse auftreten, z. B. wenn die Textansicht mit der Bearbeitung beginnt. Wenn eine der Methoden angezeigt wird, haben Sie die Möglichkeit, benutzerdefinierte Aktionen auszuführen. Folgende UITextViewDelegate Methodenimplementierungen zeigen, wie Sie dies tun könnten.

Bevor wir die Delegat-Methoden implementieren, gehen wir zurück und setzen das Textvorschau Eigentum an delegieren selbst um das einzustellen ViewController Objekt als Delegierter der UITextView. Klicken Sie auf die Datei "ViewController.m". In dem viewDidLoad Methode, bei der die Textansicht programmgesteuert erstellt wurde, fügen Sie den folgenden Code über der hinzu [self.view addSubview: textView]; line (Sie können sich immer auf den Quellcode beziehen, der diesem Beitrag beigefügt ist).

 textView.delegate = self;

Um dies auch mit der in Interface Builder erstellten Textansicht zu tun, klicken Sie auf die Datei "ViewController.xib". Wählen Sie die Textansicht aus und klicken Sie auf Ansicht> Dienstprogramme> Verbindungsinspektor anzeigen. Klicken Sie auf den Pfeil "Outlets" im Bereich "Connections Inspector", um ihn zu öffnen. Klicken Sie auf den Kreis gegenüber "Delegieren" und klicken Sie dann mit gedrückter Maustaste auf "Dateibesitzer", um die Verbindung zwischen der Textansicht und der Datei herzustellen ViewController.

Klicken Sie auf "ViewController.h" und geben Sie den folgenden Code ein UITextViewDelegate Protokoll.

 @Interface ViewController: UIViewController 

Das UITextViewDelegate Protokollmethoden sind alle optional, dh Sie müssen sie nicht implementieren, wenn Sie sie nicht verwenden. Sprechen wir über die Methoden, wenn wir sie hinzufügen.

textViewShouldBeginEditing: und textViewDidBeginEditing:

Klicken Sie auf "ViewController.m" und fügen Sie den folgenden Code hinzu.

 - (BOOL) textViewShouldBeginEditing: (UITextView *) textView NSLog (@ "textViewShouldBeginEditing:"); JA zurückgeben;  - (void) textViewDidBeginEditing: (UITextView *) textView NSLog (@ "textViewDidBeginEditing:"); textView.backgroundColor = [UIColor greenColor]; 

Die Methode textViewShouldBeginEditing: wird genannt kurz bevor Die Textansicht wird aktiv. Die Methode textViewDidBeginEditing: wird genannt wann Die Textansicht wird aktiv und wechselt in den Status des ersten Responders. Verhaltensanpassungen, die Sie vornehmen möchten, wenn die Textansicht aktiv wird, sollten hier angezeigt werden. In unserem Beispiel wird die Hintergrundfarbe der Textansicht grün, wenn die Textansicht aktiv ist.

textViewShouldEndEditing: und textViewDidEndEditing:

Fügen Sie den folgenden Code unter den vorherigen Methoden hinzu.

 - (BOOL) textViewShouldEndEditing: (UITextView *) textView NSLog (@ "textViewShouldEndEditing:"); textView.backgroundColor = [UIColor whiteColor]; JA zurückgeben;  - (void) textViewDidEndEditing: (UITextView *) textView NSLog (@ "textViewDidEndEditing:"); 

textViewShouldEndEditing: wird genannt kurz bevor Die Textansicht wird inaktiv. textViewDidEndEditing: wird genannt wann Die Textansicht wird inaktiv. Sie ähneln den beiden Methoden, die aufgerufen werden, wenn die Textansicht mit der Bearbeitung beginnt, und eine der beiden Methoden ist eine geeignete Stelle für die Logik, die ausgelöst wird, wenn der Benutzer die Bearbeitung abgeschlossen hat. In unserem Beispiel verwenden wir textViewShouldEndEditing: um die Hintergrundfarbe auf ihre normale Farbe zurückzusetzen.

textView: shouldChangeCharactersInRange: replacementString

Fügen Sie den folgenden Code unter den vorherigen Methoden hinzu.

 - (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) Bereich ErsetzungText: (NSString *) text NSCharacterSet * doneButtonCharacterSet = [NSCharacterSet newlineCharacterSet]; NSRange replacementTextRange = [text rangeOfCharacterFromSet: doneButtonCharacterSet]; NSUInteger location = replacementTextRange.location; if (textView.text.length + text.length> 140) if (location! = NSNotFound) [textView resignFirstResponder]];  NEIN zurückgeben;  else if (location! = NSNotFound) [textView resignFirstResponder]; NEIN zurückgeben;  JA zurückgeben; 

Jedes Mal, wenn ein Benutzer ein Zeichen auf der Tastatur eingibt, wird die Methode, kurz bevor das Zeichen angezeigt wird, angezeigt textView: shouldChangeCharactersInRange: replacementString wird genannt. Dies ist ein praktischer Ort, um die von einem Benutzer eingegebenen Zeichen zu testen und bestimmte Zeichen, die Sie einschränken möchten, nicht zuzulassen. In unserem Beispiel verwenden wir die Fertig-Taste, um die Tastatur neu zu bestimmen, indem geprüft wird, ob der Ersetzungstext eines der Zeichen in enthält newLineCharacterSet. Wenn es ein Zeichen aus der newLineCharacterSet, dann ist es die Taste Fertig, die gedrückt wurde, und daher sollte die Tastatur zurücktreten. Außerdem können Sie die aktuelle Länge der Textansicht jedes Mal testen, wenn ein Zeichen eingegeben wird, und zurückkehren NEIN Bei mehr als 140 Zeichen ist die Textansicht auf maximal 140 Zeichen beschränkt.

textViewDidChange:

Fügen Sie den folgenden Code unter den vorherigen Methoden hinzu.

 - (void) textViewDidChange: (UITextView *) textView NSLog (@ "textViewDidChange:"); 

Die Methode textViewDidChange: wird nur aufgerufen, wenn der Text in der Textansicht vom Benutzer geändert wird. Es gibt verschiedene Verhaltensweisen, die Sie anpassen möchten, je nachdem, wann der Benutzer den Text in der Textansicht ändert. Ein Beispiel ist die Anzeige der Anzahl der verbleibenden Zeichen, wenn eine Textansicht auf 140 Zeichen beschränkt ist. Bei jeder Änderung des Textes kann die angezeigte Anzahl aktualisiert werden.

textViewDidChangeSelection:

Fügen Sie den folgenden Code unter den vorherigen Methoden hinzu.

 - (void) textViewDidChangeSelection: (UITextView *) textView NSLog (@ "textViewDidChangeSelection:"); 

Die Methode textViewDidChangeSelection: Wird aufgerufen, wenn ein Textabschnitt ausgewählt oder die Auswahl geändert wird, z. B. beim Kopieren oder Einfügen eines Textabschnitts. Obwohl dies wahrscheinlich eine der weniger verwendeten Delegatmethoden ist, kann es unter bestimmten Umständen vorteilhaft sein, das Verhalten der Textansicht anzupassen, wenn Text ausgewählt wird.


Schritt 5: Testen der Textansichten

Klicken Sie auf Erstellen> Ausführen oder klicken Sie auf den Pfeil "Ausführen" in der oberen linken Ecke. Öffnen Sie die Konsole und erkunden Sie die Textansicht. Das NSLog In jeder Methode wird eine Zeichenfolge in der Konsole angezeigt, wenn diese Delegatmethode aufgerufen wird.

So wird die Textansicht im Simulator angezeigt:


Fazit

Durch das Verstehen, wenn die UITextViewDelegate Protokollmethoden aufgerufen werden, können Sie die in den Delegaten integrierte Funktionalität voll ausnutzen. Wenn Sie feststellen, dass eine Delegatmethode in der Benutzerinteraktion nicht an der richtigen Stelle positioniert ist, versuchen Sie eine andere Methode. Irgendwann werden Sie die richtige Methode finden, um Ihre Logik zu platzieren, damit Ihre Anwendung genau so funktioniert, wie Sie möchten!