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!
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".
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.
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
.
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.
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];
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.
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:
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!