Denne veiledningen for iOS SDK Beginner vil lære deg hvordan du bygger et enkelt grensesnitt som består av et brukernavn og passord UITextField
. Vi vil dekke både hvordan du legger til et tekstfelt i Interface Builder og hvordan du oppretter en programmatisk. I tillegg vil vi utforske UITextFieldDelegate
protokollmetoder og demonstrere noen praktiske teknikker for å arbeide med brukerinngang.
Opprette elementer, for eksempel et tekstfelt, kan gjøres på to måter. Du kan opprette den i Interface Builder, eller du kan kodes det selv programmatisk. Selv om det kan være mer praktisk å lage et element i Interface Builder, foretrekker mange programmerere å lage elementer programmatisk. Denne opplæringen vil kort forklare begge alternativene.
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 "TextFieldARC" 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".
UITextField
Klikk på "ViewController.m" -filen og skriv inn følgende kode i viewDidLoad
metode.
CGRect passwordTextFieldFrame = CGRectMake (20.0f, 100.0f, 280.0f, 31.0f); UITextField * passwordTextField = [[UITextField alloc] initWithFrame: passwordTextFieldFrame]; passwordTextField.placeholder = @ "Passord"; passwordTextField.backgroundColor = [UIColor whiteColor]; passwordTextField.textColor = [UIColor blackColor]; passwordTextField.font = [UIFont systemFontOfSize: 14.0f]; passwordTextField.borderStyle = UITextBorderStyleRoundedRect; passwordTextField.clearButtonMode = UITextFieldViewModeWhileEditing; passwordTextField.returnKeyType = UIReturnKeyDone; passwordTextField.textAlignment = UITextAlignmentLeft; passwordTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; passwordTextField.tag = 2; passwordTextField.autocapitalizationType = UITextAutocapitalizationTypeNone; [self.view addSubview: passwordTextField];
Legg merke til at tekstfeltets tagegenskap er satt til "2." Angi taggegenskapen er en måte å holde oversikt over hvilket tekstfelt som er aktivt i programmet.
Klikk på "ViewController.xib" -filen i "Navigator" -panelet i Xcode-prosjektet. 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 "Tekstfelt" -objekt. Klikk for å velge den, og dra og slipp deretter tekstfeltet til visningen.
Juster tekstfeltet slik at det strekker seg over toppen av visningen. Med tekstfeltet valgt, klikker du på Vis> Verktøy> Vis attributter inspektør. Se etter "Plassholder" -feltet i ruten "Attributtsinspektør" under "Tekstfelt" og endre det til "Brukernavn". Klikk på rullegardinmenyen "Slett knapp" og velg "Vises mens du redigerer." Klikk på rullegardinmenyen "Return Key" og velg "Next". Til slutt ruller du ned til "Tag" -feltet under "Vis" og endrer det til "1." Klikk på Fil> Lagre.
Hvis du kjører programmet nå, bør du ha en UITextField
objekt på skjermen som kan motta input! Du kan få tilgang til verdien av objektet med tekst
eiendom (dvs. passwordTextField.text).
Imidlertid vil bruk av TextField på dette punktet presentere et bemerkelsesverdig problem. Det er ingen standardmetode for å fjerne tastaturet fra visningen. Så, for vårt neste triks ...
Å tømme tastaturet når bakgrunnen er tappet, kan oppnås på forskjellige måter. Koden nedenfor er et eksempel på en 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];
Kjør prosjektet igjen, og du bør nå kunne avvise tastaturet ved å trykke på skjermen.
Delegasjon er et mønster som i hovedsak lar to objekter kommunisere med hverandre. EN UITextField
Motta meldinger som passer UITextFieldDelegate
Metode når visse hendelser oppstår, for eksempel når tekstfeltet begynner å redigere. Når en melding sendes til en av metodene, har du mulighet til å utføre tilpassede handlinger. Objektet som mottar delegatemeldingene, kan være et hvilket som helst objekt som samsvarer med delegatprotokollen, i dette tilfellet UITextFieldDelegate
. Men i det mest vanlige scenariet blir objektet som mottar UITextField
delegere meldinger vil være de samme UIViewController
objekt som inneholder UITextField
som et undervisning.
Klikk på "ViewController.m" -filen. I viewDidLoad
metode der vi programmatisk opprettet tekstfeltet ovenfor, legg til følgende kode:
passwordTextField.delegate = self; // ADD THIS LINE [self.view addSubview: passwordTextField];
Ved å sette inn tekstfelt
delegere eiendom til selv-
, de ViewController
objekt blir delegat til tekstfeltet og kan implementere UITextFieldDelegate
fremgangsmåter.
For å sette delegaten for tekstfeltet opprettet i Interface Builder, klikk på "ViewController.xib." Klikk på tekstfeltet i visningen, og klikk på Vis> Verktøy> Vis tilkoblingsinspektør. Se etter "delegat" under "Outlets" i "Connections Inspector" -panelet til høyre. Klikk sirkelen ved siden av den, og dra og slipp den til "Filens eier" i "Dokumentoversikt" -ruten til venstre. Dette ledes opp i tekstfeltet slik at ViewController
objektet er angitt som tekstfeltets delegat. Klikk på Fil> Lagre.
Endelig klikker du på "ViewController.h," og skriver inn følgende kode for å tilpasse klassen til UITextFieldDelegate
protokoll:
@interface ViewController: UIViewController
Følgende UITextFieldDelegate
protokollmetoder er alle valgfrie, noe som betyr at de ikke må implementeres av delegaten. Vi skal imidlertid implementere dem alle for å lære om dem. La oss diskutere metodene når vi skriver dem inn.
textFieldShouldBeginEditing:
og textFieldDidBeginEditing:
Klikk på "ViewController.m" og legg til følgende kode.
- (BOOL) textFieldShouldBeginEditing: (UITextField *) textField NSLog (@ "textFieldShouldBeginEditing"); textField.backgroundColor = [UIColor colorWithRed: 220.0f / 255.0f grønn: 220.0f / 255.0f blå: 220.0f / 255.0f alfa: 1.0f]; returnere JA; - (void) textFieldDidBeginEditing: (UITextField *) textField NSLog (@ "textFieldDidBeginEditing");
textFieldShouldBeginEditing:
er kalt like før Tekstfeltet blir aktivt. Dette er et bra sted å tilpasse oppførselen til søknaden din. I dette tilfellet endres bakgrunnsfargen til tekstfeltet når denne metoden kalles for å indikere at tekstfeltet er aktivt. textFieldDidBeginEditing:
er kalt når Tekstfeltet blir aktivt.
textFieldShouldEndEditing:
og textFieldDidEndEditing:
Legg til følgende kode under de tidligere metodene.
- (BOOL) textFieldShouldEndEditing: (UITextField *) textField NSLog (@ "textFieldShouldEndEditing"); textField.backgroundColor = [UIColor whiteColor]; returnere JA; - (void) textFieldDidEndEditing: (UITextField *) textField NSLog (@ "textFieldDidEndEditing");
Disse to metodene ligner metodene som kalles når tekstfeltet begynner å redigere. textFieldShouldEndEditing:
er kalt like før Tekstfeltet blir inaktivt og textFieldDidEndEditing:
er kalt når Tekstfeltet blir inaktivt. Innsiden textFieldShouldEndEditing:
, Bakgrunnsfargen endres tilbake til hvitt, slik at tekstfeltet kan gå tilbake til sin opprinnelige farge. Igjen, gir disse metodene deg en sjanse til å tilpasse oppførselen til applikasjonen som tekstfeltet blir inaktivt.
Textfield: shouldChangeCharactersInRange: replacementString
Legg til følgende kode under de tidligere metodene.
- (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) rekkevidde erstatningString: (NSString *) streng NSLog (@ "textField: shouldChangeCharactersInRange: replacementString:"); hvis ([streng isEqualToString: @ "#"]) return NO; ellers return YES;
textFieldShouldChangeCharactersInRange: replacementString:
kalles hver gang brukeren skriver et tegn på tastaturet. Faktisk kalles denne metoden like før et tegn vises. Hvis du ønsker å begrense bestemte tegn fra et tekstfelt, er dette metoden for deg. Som du kan se i vårt eksempel, la vi til noen logikk for å avvise symbolet "#".
textFieldShouldClear:
Legg til følgende kode under de tidligere metodene.
- (BOOL) textFieldShouldClear: (UITextField *) textField NSLog (@ "textFieldShouldClear:"); returnere JA;
textFieldShouldClear:
kalles når brukeren trykker på knappen Clear, den grå "x", inne i tekstfeltet. Før det aktive tekstfeltet slettes, gir denne metoden deg muligheten til å foreta nødvendige tilpasninger.
textFieldShouldReturn:
Legg til følgende kode under de tidligere metodene.
- (BOOL) textFieldShouldReturn: (UITextField *) textField NSLog (@ "textFieldShouldReturn:"); if (textField.tag == 1) UITextField * passwordTextField = (UITextField *) [self.view viewWithTag: 2]; [passwordTextField blir første gangsavspiller]; ellers [textField resignFirstResponder]; returnere JA;
textFieldShouldReturn:
kalles når brukeren trykker på returknappen på tastaturet. I eksemplet finner vi ut hvilket tekstfelt som er aktivt ved å se på taggen. Hvis tekstfeltet "Brukernavn" er aktivt, skal neste tekstfelt, "Passord", bli aktivt i stedet. Hvis tekstfeltet "Passord" er aktivt, "Passord" skal trekke seg av, og avslutte tastaturet med det.
Klikk på Bygg> Kjør, eller klikk på pilen "Kjør" øverst i venstre hjørne. Når konsollen er åpen, lek med tekstfeltene. De NSLog
plassert i hver av de delegerte protokollmetodene, hjelper tidligere å se omstendighetene der hver delegatemetode kalles.
De UITextFieldDelegate
protokollmetoder gir en flott mulighet til å tilpasse oppførselen til a UITextField
. Denne opplæringen er fokusert på noen av de vanligste oppgavene knyttet til UITextField
, for eksempel å avslutte tastaturet og flytte til neste tekstfelt, men mulighetene for å tilpasse atferd er uendelige. Når du begynner å forstå delegasjonsdesignmønsteret, er det lettere å forgrene seg til andre forhåndsbygde objekter som bruker delegater, for eksempel UITableView
eller UIScrollView
. Hold din gamle venn NSLog
i baklommen din når du begynner å utforske andre delegater, og det vil hjelpe deg med å forstå delegatets indre arbeid.