iOS SDK UITextView & UITextViewDelegate

In deze iOS SDK Basics-tutorial gaan we een UITextView, implementeer de UITextViewDelegate protocol methoden en gebruik NSLog om te zien wanneer de methoden worden aangeroepen. We zullen ook ingaan op hoe je het aantal tekens in een tekstweergave kunt beperken en hoe je de return-toets kunt gebruiken om het toetsenbord te verlaten. Lees verder om te leren hoe deze functies in uw toepassing kunnen worden geïmplementeerd!


Stap 1: Maak een nieuw Xcode-project

Start Xcode en klik op Bestand> Nieuw> Project. Klik op "Toepassing" onder het iOS-paneel aan de linkerkant. Klik op het pictogram met de titel "Single View Application" en klik op "Volgende". Typ 'TextViewARC' in het veld 'Productnaam' en voer een naam in voor uw bedrijfsidentificatie, zoals 'com.companyName'. Kies 'iPhone' in het menu 'Apparaatfamilie'. Zorg ervoor dat u 'Gebruik storyboards' en 'Inclusief eenheidstests' uitschakelt en schakel 'Automatische referentietelling gebruiken' in voordat u op Volgende klikt. Kies een locatie om uw project op te slaan en klik op 'Maken'.

Typ in het veld "Productnaam" "TextViewARC" en voer een naam in voor uw bedrijfsidentificatie, zoals "com.companyName". Kies 'iPhone' in het menu 'Apparaatfamilie'. Zorg ervoor dat u "Gebruik storyboards" en "Inclusief eenheidstests" uitschakelt en vink "Gebruik automatische referentietelling" aan voordat u op "Volgende" klikt. Kies een locatie om uw project op te slaan en klik op 'Maken'.


Stap 2: Creëren van een UITextView

Een UITextView-object kan ofwel programmatisch (dat wil zeggen in code) of grafisch worden gemaakt met het hulpprogramma Interface Builder. In deze zelfstudie wordt kort uitgelegd hoe het object met beide methoden kan worden gemaakt.

programmatisch

Klik op het bestand "ViewController.m" en typ de volgende code.

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

Dit maakt programmatisch een UITextView object en voegt het toe aan de weergave van de ViewController.

Met Interface Builder

Als alternatief kunt u een maken UITextView in het .xib-bestand. Begin door te klikken op het .xib-bestand in het "Navigator" -paneel van uw Xcode-venster. Klik op 'Beeld' in het deelvenster 'Documentoverzicht' aan de linkerkant. Klik op Beeld> Hulpprogramma's> Objectbibliotheek tonen. Blader door de Objectbibliotheek in de linkerbenedenhoek totdat u een "Tekstweergave" -object vindt. Klik om het te selecteren en sleep vervolgens de tekstweergave naar de weergave. Pas de tekstweergave aan zodat deze zich in het bovenste gedeelte van de weergave bevindt en ongeveer 125 pixels hoog is.


Stap 3: Het toetsenbord verwijderen

Het ontslag van het toetsenbord wanneer de achtergrond wordt aangeboord, kan op verschillende manieren worden bereikt. De onderstaande code is een voorbeeld van een dergelijke techniek. Klik op het bestand "ViewController.m" en voeg de volgende methode-implementatie toe:

 - (ongeldig) raaktBegan: (NSSet *) raakt aan metEvent: (UIEvent *) -gebeurtenis NSLog (@ "raaktBegan: withEvent:"); [self.view endEditing: YES]; [super raaktBegan: raakt aan met Event: event]; 

Stap 4: Protocolprocedures delegeren

Eenvoudig gezegd, helpt een gedelegeerde twee objecten met elkaar te communiceren. In het geval van de UITextViewDelegate methoden, de UITextView kan de gedelegeerde methoden melden wanneer bepaalde gebeurtenissen plaatsvinden, zoals wanneer de tekstweergave begint met bewerken. Wanneer een van de methoden wordt verzonden, hebt u de mogelijkheid om aangepaste acties uit te voeren. Het volgende UITextViewDelegate methode-implementaties laten zien hoe je dit kunt doen.

Voordat we de gedelegeerde methoden implementeren, laten we teruggaan en de tekstweergave eigenschap delegeren naar zelf om de ViewController object als de afgevaardigde van de UITextView. Klik op het bestand "ViewController.m". In de viewDidLoad methode, waarbij we de tekstweergave programmatisch hebben gemaakt, voeg de volgende code toe boven de [self.view addSubview: textView]; regel (je kunt altijd de broncode raadplegen die bij dit bericht is gevoegd voor hulp).

 textView.delegate = self;

Om hetzelfde te doen met de tekstweergave die is gemaakt in Interface Builder, klikt u op het bestand "ViewController.xib". Selecteer de tekstweergave en klik op Beeld> Hulpprogramma's> Show Connections Inspector. Klik op de pijl "Uitgangen" in het deelvenster "Connections Inspector" om het te openen. Klik op de cirkel tegenover "delegate" en klik en sleep vanuit de cirkel naar "Eigenaar van bestand" om de verbinding te maken tussen de tekstweergave en de ViewController.

Klik op "ViewController.h" en typ de volgende code om aan te voldoen UITextViewDelegate protocol.

 @interface ViewController: UIViewController 

De UITextViewDelegate protocolmethoden zijn allemaal optioneel, wat betekent dat u ze niet hoeft te implementeren als u ze niet gebruikt. Laten we het hebben over de methoden terwijl we ze toevoegen.

textViewShouldBeginEditing: en textViewDidBeginEditing:

Klik op "ViewController.m" en voeg de volgende code toe.

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

De methode textViewShouldBeginEditing: wordt genoemd net voor de tekstweergave wordt actief. De methode textViewDidBeginEditing: wordt genoemd wanneer de tekstweergave wordt actief en verandert in de status van de eerste responder. Gedragsaanpassingen die u wilt laten gebeuren wanneer de tekstweergave actief wordt, moeten hier naartoe gaan. In ons voorbeeld wordt de achtergrondkleur van de tekstweergave groen wanneer de tekstweergave actief is.

textViewShouldEndEditing: en textViewDidEndEditing:

Voeg de onderstaande code toe onder de vorige methoden.

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

textViewShouldEndEditing: wordt genoemd net voor de tekstweergave wordt inactief. textViewDidEndEditing: wordt genoemd wanneer de tekstweergave wordt inactief. Ze lijken op de twee methoden die worden aangeroepen wanneer de tekstweergave begint met bewerken en beide methoden zijn een geschikte plaats voor logica die wordt geactiveerd wanneer de gebruiker klaar is met bewerken. In ons voorbeeld gebruiken we textViewShouldEndEditing: om de achtergrondkleur in de normale kleur terug te brengen.

TextView: shouldChangeCharactersInRange: replacementString

Voeg de onderstaande code toe onder de vorige methoden.

 - (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) range replacementText: (NSString *) tekst NSCharacterSet * doneButtonCharacterSet = [NSCharacterSet newline CharcharetSet]; NSRange replacementTextRange = [text rangeOfCharacterFromSet: doneButtonCharacterSet]; NSUInteger locatie = replacementTextRange.location; if (textView.text.length + text.length> 140) if (location! = NSNotFound) [textView resignFirstResponder];  return NO;  else if (location! = NSNotFound) [textView resignFirstResponder]; return NO;  return YES; 

Telkens wanneer een gebruiker een teken op het toetsenbord typt, net voordat het teken wordt weergegeven, de methode TextView: shouldChangeCharactersInRange: replacementString wordt genoemd. Dit is een handige locatie om de tekens te testen die een gebruiker aan het typen is en specifieke tekens die u wilt beperken te weigeren. In ons voorbeeld gebruiken we de toets Klaar om het toetsenbord te verlaten door te testen of de vervangende tekst een van de tekens bevat newLineCharacterSet. Als het een personage uit de newLineCharacterSet, dan is het de voltooide knop die is ingedrukt, en daarom zou het toetsenbord moeten aftreden. Bovendien, door de huidige lengte van de tekstweergave te testen telkens wanneer een karakter wordt getypt en teruggestuurd NEE als deze groter is dan 140 tekens, wordt de tekstweergave beperkt tot niet meer dan 140 tekens.

textViewDidChange:

Voeg de onderstaande code toe onder de vorige methoden.

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

De methode textViewDidChange: wordt alleen aangeroepen wanneer de tekst in de tekstweergave door de gebruiker wordt gewijzigd. Er zijn verschillende gedragingen die u misschien wilt aanpassen op basis van wanneer de gebruiker de tekst in de tekstweergave wijzigt. Een voorbeeld is als u het aantal resterende tekens zou weergeven wanneer een tekstweergave beperkt is tot 140 tekens. Elke keer dat de tekst verandert, kan het weergegeven nummer worden bijgewerkt.

textViewDidChangeSelection:

Voeg de onderstaande code toe onder de vorige methoden.

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

De methode textViewDidChangeSelection: wordt aangeroepen wanneer een tekstgedeelte wordt geselecteerd of de selectie wordt gewijzigd, zoals bij het kopiëren of plakken van een tekstgedeelte. Hoewel dit waarschijnlijk een van de minder gebruikte methoden voor deelnemers is, kan het in bepaalde omstandigheden nuttig zijn om het gedrag van de tekstweergave aan te passen wanneer tekst is geselecteerd.


Stap 5: De tekstweergaven testen

Klik op Maken> Uitvoeren of klik op de pijl "Uitvoeren" in de linkerbovenhoek. Open de console en verken de tekstweergave. De NSLog in elke methode wordt een tekenreeks in de console weergegeven wanneer die gedelegeerde methode wordt aangeroepen.

Hier ziet u hoe de tekstweergave wordt weergegeven in de Simulator:


Conclusie

Door te begrijpen wanneer het UITextViewDelegate protocolmethoden worden aangeroepen, kunt u volledig profiteren van de functionaliteit die is ingebouwd in de gemachtigde. Als u vindt dat een methode van een gedelegeerde zich niet op de juiste plaats in de interactie van de gebruiker bevindt, probeer dan een andere methode. Op een gegeven moment vindt u de juiste methode om uw logica te plaatsen, zodat uw toepassing precies werkt zoals u dat wilt!