iOS SDK UITextView & UITextViewDelegate

I denna iOS SDK Basics handledning kommer vi att skapa en UITextView, implementera UITextViewDelegate protokollmetoder och användning NSLog att se när metoderna heter. Vi kommer också att beröra hur du begränsar antalet tecken i en textvy och hur du använder returnyckeln för att säga upp tangentbordet. Läs vidare för att lära dig hur du implementerar dessa funktioner i din ansökan!


Steg 1: Skapa ett nytt Xcode-projekt

Starta Xcode och klicka på Arkiv> Nytt> Projekt. Klicka på "Application" under IOS-panelen till vänster. Klicka på ikonen med titeln "Single View Application" och klicka på "Next". Skriv "TextViewARC" i fältet "Produktnamn" och ange ett namn för din företagsidentifierare, till exempel "com.companyName". Välj "iPhone" från menyn "Enhetsfamilj". Se till att avmarkera "Använd Storyboards" och "Include Unit Tests" och kolla "Use Automatic Reference Counting" innan du klickar på "Next". Välj en plats för att lagra ditt projekt och klicka på "Skapa".

I fältet "Produktnamn" skriver du "TextViewARC" och anger ett namn för ditt företagsidentifierare, till exempel "com.companyName". Välj "iPhone" från menyn "Enhetsfamilj". Se till att avmarkera "Använd Storyboards" och "Include Unit Tests" och kolla "Använd Automatic Reference Counting" innan du klickar på "Next". Välj en plats för att lagra ditt projekt och klicka på "Skapa".


Steg 2: Skapa en UITextView

Ett UITextView-objekt kan skapas antingen programmatiskt (dvs. i kod) eller grafiskt med verktyget Interface Builder. Denna handledning visar kortfattat hur man skapar objektet med båda metoderna.

programmatiskt

Klicka på filen "ViewController.m" och skriv följande kod.

 CGRect textViewFrame = CGRectMake (20,0f, 20,0f, 280,0f, 124,0f); UITextView * textView = [[UITextView alloc] initWithFrame: textViewFrame]; textView.returnKeyType = UIReturnKeyDone; [self.view addSubview: textView];

Detta skapar programmatiskt en UITextView objekt och lägger till den i vyn av ViewController.

Med gränssnittsbyggare

Alternativt kan du skapa en UITextView i .xib-filen. Börja med att klicka på .xib-filen i "Navigator" -panelen i ditt Xcode-fönster. Klicka på "Visa" i rutan "Dokumentutskick" till vänster. Klicka på Visa> Verktyg> Visa objektbibliotek. Bläddra i Objekt-biblioteket i nedre vänstra hörnet tills du hittar ett "Text View" -objekt. Klicka för att markera den och dra och släpp sedan textvisningen till vyn. Justera textvyn så att den sitter i den övre delen av vyn och är cirka 125 pixlar lång.


Steg 3: Ta bort tangentbordet

Avsluta tangentbordet när bakgrunden tappas kan uppnås på olika sätt. Koden nedan är ett exempel på en sådan teknik. Klicka på "ViewController.m" -filen och lägg till följande metodimplementering:

 - (void) touchesBegan: (NSSet *) berörs medEvent: (UIEvent *) händelse NSLog (@ "touchesBegan: withEvent:"); [self.view endEditing: JA]; [super touchesBegan: berörs medEvent: händelse]; 

Steg 4: Delegera protokollmetoder

Enkelt sagt, en delegat hjälper två objekt att kommunicera med varandra. I fallet med UITextViewDelegate metoder, UITextView kan meddela delegerade metoder när vissa händelser inträffar, till exempel när textvyn börjar börja redigera. När en av metoderna är meddelad har du möjlighet att utföra anpassade åtgärder. Det följande UITextViewDelegate Metodimplementeringar visar hur du kan göra om du gör det här.

Innan vi genomför delegerade metoder, låt oss gå tillbaka och ställa in Textview delegera egendom till själv för att ställa in ViewController föremål som delegat av UITextView. Klicka på "ViewController.m" -filen. I viewDidLoad metod, där vi programmatiskt skapade textvyn, lägg till följande kod ovanför [self.view addSubview: textView]; linje (du kan alltid referera till källkoden bifogad till det här inlägget för hjälp).

 textView.delegate = self;

För att göra detsamma med textvyn som skapats i gränssnittsbyggare, klicka på "ViewController.xib" -filen. Välj textvyn och klicka på Visa> Verktyg> Visa anslutningsinspektör. Klicka på "Uttag" -pilen i rutan "Anslutningsinspektör" för att öppna den. Klicka på cirkeln motsatt "delegat", och klicka sedan och dra från cirkeln till "Filens ägare" för att koppla mellan textvyn och den ViewController.

Klicka på "ViewController.h" och skriv följande kod för att överensstämma med UITextViewDelegate protokoll.

 @interface ViewController: UIViewController 

De UITextViewDelegate protokollmetoder är alla valfria, vilket betyder att du inte behöver implementera dem om du inte använder dem. Låt oss prata om metoderna när vi lägger till dem.

textViewShouldBeginEditing: och textViewDidBeginEditing:

Klicka på "ViewController.m" och lägg till följande kod.

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

Metoden textViewShouldBeginEditing: kallas precis innan Textvyn blir aktiv. Metoden textViewDidBeginEditing: kallas när Textvyn blir aktiv och ändras till den första responderstatusen. Behavior anpassningar som du vill hända när textvyn blir aktiv bör gå här. I vårt exempel blir bakgrundsfärgen på textvisningen grön när textvyn är aktiv.

textViewShouldEndEditing: och textViewDidEndEditing:

Lägg till följande kod under tidigare metoder.

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

textViewShouldEndEditing: kallas precis innan Textvisningen blir inaktiv. textViewDidEndEditing: kallas när Textvisningen blir inaktiv. De liknar de två metoder som kallas när textvyn börjar börja redigera, och båda metoderna är en lämplig plats för logik som utlöses när användaren gör redigeringen. I vårt exempel använder vi textViewShouldEndEditing: för att återställa bakgrundsfärgen till sin normala färg.

Textview: shouldChangeCharactersInRange: replacementString

Lägg till följande kod under tidigare metoder.

 - (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) range replacementText: (NSString *) text NSCharacterSet * doneButtonCharacterSet = [NSCharacterSet newlineCharacterSet]; NSRange replacementTextRange = [textintervallOfCharacterFromSet: doneButtonCharacterSet]; NSUInteger location = replacementTextRange.location; om (textView.text.length + text.length> 140) om (location! = NSNotFound) [textView resignFirstResponder];  returnera nej;  annars om (plats! = NSNotFound) [textView resignFirstResponder]; returnera nej;  returnera JA; 

Varje gång en användare skriver en karaktär på tangentbordet, före metoden visas metoden Textview: shouldChangeCharactersInRange: replacementString kallas. Det här är ett praktiskt ställe för att testa de tecken som en användare skriver och avvisa specifika tecken du vill begränsa. I vårt exempel använder vi den färdiga nyckeln för att avgå tangentbordet genom att testa för att se om ersättningstexten innehåller någon av tecknen i newLineCharacterSet. Om det är ett tecken från newLineCharacterSet, då är det den färdiga knappen som har tryckts, och därför borde tangentbordet avgå. Dessutom, genom att testa textvyens aktuella längd varje gång ett tecken skrivs och återgår NEJ Om den är större än 140 tecken, blir textvisningen begränsad till högst 140 tecken.

textViewDidChange:

Lägg till följande kod under tidigare metoder.

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

Metoden textViewDidChange: kallas endast när texten i textvyn ändras av användaren. Det finns en rad olika beteenden som du kan vilja anpassa efter baserat på när användaren ändrar texten i textvyn. Ett exempel är om du skulle visa antalet tecken kvar när en textvy är begränsad till 140 tecken. Varje gång texten ändras kan det visade numret uppdateras.

textViewDidChangeSelection:

Lägg till följande kod under tidigare metoder.

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

Metoden textViewDidChangeSelection: kallas när en textdel väljs eller valet ändras, t.ex. vid kopiering eller klistra in en textdel. Även om detta förmodligen är en av de mindre använda delegerade metoderna, kan det under vissa omständigheter vara fördelaktigt att anpassa beteendet för textvisningen när text är vald.


Steg 5: Testa textvisningarna

Klicka på Bygg> Kör eller klicka på "Kör" -pilen längst upp till vänster. Öppna konsolen och utforska textvyn. De NSLog I varje metod visas en sträng i konsolen när den delegerade metoden heter.

Så här visas textvy i simulatorn:


Slutsats

Genom att förstå när UITextViewDelegate protokollmetoder kallas, du kan dra full nytta av den inbyggda funktionaliteten till delegaten. Om du hittar en delegat metod inte placerad på rätt ställe i användarens interaktion, försök en annan metod. Vid någon tidpunkt hittar du rätt metod att placera din logik, vilket gör att din ansökan fungerar exakt vad du vill ha!