iOS SDK UITextView & UITextViewDelegate

I denne iOS SDK Basics opplæringen skal vi lage en UITextView, implementere UITextViewDelegate protokollmetoder og bruk NSLog å se når metodene kalles. Vi vil også berøre hvordan du begrenser antall tegn i en tekstvisning og hvordan du bruker retur-tasten for å avslutte tastaturet. Les videre for å lære hvordan du implementerer disse funksjonene i søknaden din!


Trinn 1: Opprett et nytt Xcode-prosjekt

Start Xcode og klikk på File> New> Project. Klikk på "Application" under IOS-panelet til venstre. Klikk på ikonet med tittelen "Single View Application" og klikk "Next". I feltet "Produktnavn" skriver du "TextViewARC" og skriver inn et navn for firmaidentifikatoren, for eksempel "com.companyName". Velg "iPhone" fra menyen "Enhetsfamilie". Pass på at du fjerner merket "Bruk Storyboards" og "Include Unit Tests", og merk av "Use Automatic Reference Counting" før du klikker "Next". Velg et sted for å lagre prosjektet ditt og klikk "Opprett".

I feltet "Produktnavn" skriver du "TextViewARC" og skriver inn et navn for firmaidentifikatoren, for eksempel "com.companyName". Velg "iPhone" fra menyen "Enhetsfamilie". Pass på å fjerne merket for "Bruk Storyboards" og "Include Unit Tests" og merk av "Use Automatic Reference Counting" før du klikker "Next". Velg et sted for å lagre prosjektet ditt og klikk "Opprett".


Trinn 2: Opprette en UITextView

Et UITextView-objekt kan opprettes enten programmatisk (dvs. i kode) eller grafisk med grensesnittbyggerverktøyet. Denne opplæringen vil kort vise hvordan du lager objektet med begge metoder.

programma

Klikk på "ViewController.m" -filen og skriv inn følgende kode.

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

Dette oppretter programmatisk en UITextView objekt og legger det til visningen av ViewController.

Med grensesnittbygger

Alternativt kan du opprette en UITextView i .xib-filen. Begynn med å klikke på .xib-filen i "Navigator" -panelet i Xcode-vinduet. Klikk på "Vis" i vinduet "Dokumentoversikt" til venstre. Klikk på Vis> Verktøy> Vis objektbibliotek. Rull objektbiblioteket i nederste venstre hjørne til du finner et "tekstvisning" -objekt. Klikk for å velge den, og dra og slipp deretter tekstvisningen til visningen. Juster tekstvisningen slik at den sitter i den øverste delen av visningen, og er ca 125 piksler høy.


Trinn 3: Fjerne tastaturet

Å tømme tastaturet når bakgrunnen er tappet, kan oppnås på forskjellige måter. Koden nedenfor er et eksempel på en slik teknikk. Klikk på "ViewController.m" -filen og legg til følgende metodeimplementering:

 - (void) berørerBegan: (NSSet *) berører withEvent: (UIEvent *) hendelse NSLog (@ "berørerBegan: withEvent:"); [self.view endEditing: YES]; [super touchesBegan: berører withEvent: event]; 

Trinn 4: Delegere protokollmetoder

Enkelt sagt, hjelper en delegat to objekter kommuniserer med hverandre. I tilfelle av UITextViewDelegate metoder, UITextView er i stand til å beskrive delegatemetodene når visse hendelser oppstår, for eksempel når tekstvisningen begynner å redigere. Når en av metodene er meldt, har du mulighet til å utføre tilpassede handlinger. Følgende UITextViewDelegate Metodimplementeringer viser hvordan du kan gå om å gjøre dette.

Før vi implementerer delegatemetodene, la oss gå tilbake og sette textView delegere eiendom til selv- for å sette ViewController objekt som delegat av UITextView. Klikk på "ViewController.m" -filen. I viewDidLoad metode, der vi programmatisk opprettet tekstvisningen, legger du til følgende kode over [self.view addSubview: textView]; linje (du kan alltid referere til kildekoden knyttet til dette innlegget for hjelp).

 textView.delegate = self;

For å gjøre det samme med tekstvisningen som er opprettet i Interface Builder, klikker du på "ViewController.xib" -filen. Velg tekstvisning og klikk på Vis> Verktøy> Vis tilkoblingsinspektør. Klikk på "Uttak" -pilen i ruten "Connections Inspector" for å åpne den. Klikk på sirkelen motsatt "delegat", og klikk deretter og dra fra sirkelen til "Filens eier" for å gjøre sammenhengen mellom tekstvisningen og den ViewController.

Klikk på "ViewController.h," og skriv inn følgende kode for å overholde UITextViewDelegate protokollen.

 @interface ViewController: UIViewController 

De UITextViewDelegate protokollmetoder er alle valgfrie, noe som betyr at du ikke trenger å implementere dem hvis du ikke bruker dem. La oss snakke om metodene som vi legger til dem.

textViewShouldBeginEditing: og textViewDidBeginEditing:

Klikk på "ViewController.m" og legg til følgende kode.

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

Metoden textViewShouldBeginEditing: er kalt like før Tekstvisningen blir aktiv. Metoden textViewDidBeginEditing: er kalt når Tekstvisningen blir aktiv og endres til den første responderstatusen. Adferd tilpassinger som du vil skje når tekstvisningen blir aktiv bør gå her. I vårt eksempel blir bakgrunnsfargen til tekstvisningen grønn når tekstvisningen er aktiv.

textViewShouldEndEditing: og textViewDidEndEditing:

Legg til følgende kode under de tidligere metodene.

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

textViewShouldEndEditing: er kalt like før Tekstvisningen blir inaktiv. textViewDidEndEditing: er kalt når Tekstvisningen blir inaktiv. De ligner på de to metodene som kalles når tekstvisningen begynner å redigere, og begge metoder er et passende sted for logikk som utløses ettersom brukeren er ferdig med redigering. I vårt eksempel bruker vi textViewShouldEndEditing: å returnere bakgrunnsfarge til normal farge.

textView: shouldChangeCharactersInRange: replacementString

Legg til følgende kode under de tidligere metodene.

 - (BOOL) textvisning: (UITextView *) textView shouldChangeTextInRange: (NSRange) rekkevidde erstatningstekst: (NSString *) tekst NSCharacterSet * doneButtonCharacterSet = [NSCharacterSet newlineCharacterSet]; NSRange replacementTextRange = [tekstområdeOfCharacterFromSet: doneButtonCharacterSet]; NSUInteger location = replacementTextRange.location; hvis (textView.text.length + text.length> 140) if (location! = NSNotFound) [textView resignFirstResponder];  returnere NO;  annet hvis (sted! = NSNotFound) [textView resignFirstResponder]; returnere nei;  returnere JA; 

Hver gang en bruker skriver et tegn på tastaturet, før metoden vises, må metoden textView: shouldChangeCharactersInRange: replacementString er kalt. Dette er en praktisk plassering for å teste tegnene som en bruker skriver og deaktivere bestemte tegn du vil begrense. I vårt eksempel bruker vi den ferdige nøkkelen til å avslutte tastaturet ved å teste for å se om erstatningsteksten inneholder noen av tegnene i newLineCharacterSet. Hvis det er et tegn fra newLineCharacterSet, så er det den ferdige knappen som er trykket, og derfor bør tastaturet gå av. I tillegg, ved å teste tekstvisningens nåværende lengde hver gang et tegn skrives og returneres NEI Hvis den er større enn 140 tegn, blir tekstvisningen begrenset til ikke mer enn 140 tegn.

textViewDidChange:

Legg til følgende kode under de tidligere metodene.

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

Metoden textViewDidChange: kalles bare når teksten i tekstvisningen er endret av brukeren. Det finnes en rekke atferd du kanskje vil tilpasse basert på når brukeren endrer teksten i tekstvisningen. Én forekomst er hvis du skulle vise antall tegn igjen når en tekstvisning er begrenset til 140 tegn. Hver gang teksten endres, kan det viste nummeret oppdateres.

textViewDidChangeSelection:

Legg til følgende kode under de tidligere metodene.

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

Metoden textViewDidChangeSelection: kalles når en tekstdel er valgt, eller valget endres, for eksempel når du kopierer eller limer inn en del av teksten. Selv om dette er sannsynligvis en av de mindre brukte delegerte metodene, kan det under visse omstendigheter være gunstig å tilpasse oppførselen til tekstvisningen når tekst er valgt..


Trinn 5: Teste tekstvisninger

Klikk på Bygg> Kjør, eller klikk på pilen "Kjør" øverst i venstre hjørne. Åpne konsollen og undersøk tekstvisningen. De NSLog I hver metode vises en streng i konsollen når den delegerte metoden kalles.

Slik viser tekstvisningen i simulatoren:


Konklusjon

Ved å forstå når UITextViewDelegate protokollmetoder blir kalt, du kan dra full nytte av funksjonaliteten som er bygd inn til delegaten. Hvis du finner en delegatemetode ikke er plassert på riktig sted i brukerens samhandling, kan du prøve en annen metode. På et tidspunkt finner du den riktige metoden for å plassere logikken, slik at søknaden din fungerer akkurat slik du vil!