iOS 5 SDK UIAlertView-tekstinvoer en -validatie

Met de release van de iOS 5 SDK is de UIAlertView-klasse bijgewerkt om standaard tekstinvoer, beveiligde tekstinvoer en formuliervelden voor gebruikersnaam / wachtwoord te ondersteunen. Deze snelle tip laat zien hoe u kunt profiteren van deze nieuwe verbeteringen!

In een eerdere lange handleiding voor beginners leerde ik de lezer een project opzetten met een eigen knop en achtergrond. Ik zal het in die tutorial gemaakte project gebruiken als startpunt voor deze tutorial.

Introductie van waarschuwingsweergavestijlen

De lay-out en formulierelementen van een UIAlertView kan nu eenvoudig en snel worden gecontroleerd door de alertViewStyle eigendom. Mogelijke opties voor deze eigenschap zijn onder meer:

UIAlertViewStylePlainTextInput

Met deze stijl wordt één tekstveld aan de meldingsweergave toegevoegd:

UIAlertViewStyleSecureTextInput

Deze stijl is net als het veld met platte tekst, behalve dat alle ingevoerde tekens worden verborgen:

UIAlertViewStyleLoginAndPasswordInput

Als u deze waarde instelt voor de stijleigenschap, worden zowel een normale tekstveldinvoer voor een gebruikersnaam als een beveiligde tekstveldinvoer voor een wachtwoord toegevoegd:

UIAlertViewStyleDefault

Dit is de standaardstijl die we allemaal al kennen en waar we van houden:

Implementatie

Alle bovenstaande stijlen zijn net zo eenvoudig te implementeren als het instellen van de alertViewStyle eigendom op uw UIAlertView, ofwel met puntnotatie:

message.alertViewStyle = UIAlertViewStylePlainTextInput;

Of door de methode setter rechtstreeks te bellen:

[message setAlertViewStyle: UIAlertViewStylePlainTextInput];

Dat is het! Nadat u deze eigenschap hebt ingesteld, wordt de weergave van de waarschuwingsweergave dienovereenkomstig aangepast.

Het weergeven van tekstvelden in de waarschuwingsweergave zal natuurlijk niet veel goeds doen tenzij u ook toegang hebt tot de waarde die de gebruiker invoert. Dit wordt gedaan met de textFieldAtIndex: methode. U geeft eenvoudigweg de index op van het tekstveld dat u wilt openen (0 - 1 in de bovenstaande voorbeelden) en de relevante UITextField object wordt geretourneerd.

Bekijk de. Voor een voorbeeld van hoe dit werkt -alertView: clickedButtonAtIndex: gedelegeerde methode die we al hebben geïmplementeerd in het bijgevoegde demoproject. Als we de meldingsstijl wijzigen in UIAlertViewStyleLoginAndPasswordInput en verander de standaardknoptitel in "Login", dan kunnen we toegang krijgen tot de waarden die door de gebruiker in de gedelegeerde methode zijn ingevoerd, zoals:

- (ongeldig) alertView: (UIAlertView *) alertView ClickedButtonAtIndex: (NSInteger) buttonIndex NSString * title = [alertView buttonTitleAtIndex: buttonIndex]; if ([title isEqualToString: @ "Login"]) UITextField * username = [alertView textFieldAtIndex: 0]; UITextField * wachtwoord = [alertView textFieldAtIndex: 1]; NSLog (@ "Gebruikersnaam:% @ \ nWachtwoord:% @", gebruikersnaam.text, wachtwoord.text); 

Mogelijke valkuilen

Er zijn een paar manieren waarop het gebruik van de nieuwe waarschuwingsstijlen averechts kan werken.

Te veel knoppen

Als u slechts drie knoppen toevoegt aan de UIAlertView, de lay-out van elke nieuwe stijl wordt scheef.

Alle nieuwe stijlen kunnen comfortabel 2 knoppen aan, maar de standaardstijl die in het verleden werd gebruikt, kan tot 6 verwerken wanneer de titel en het bericht worden verwijderd:

Te veel tekst

De UIAlertViewStyleLoginAndPasswordInput stijl kan de overlooptekst niet netjes verwerken als de andere stijlen:

Zelfs als u slechts een kort bericht invoert zoals 'U moet zowel een gebruikersnaam als een wachtwoord invoeren'. was genoeg om de esthetiek te verpesten.

Input valideren

Naast de hierboven besproken knopstijlen introduceerde de iOS 5 SDK ook een nieuw UIAlertViewDelegate methode, -alertViewShouldEnableFirstOtherButton:. Deze methode wordt zowel bij het eerste weergeven van de waarschuwingsweergave als bij elke keer dat de gebruiker een teken invoert in een van de tekstvelden genoemd, waardoor het zeer eenvoudig is om basisinvoervalidatie uit te voeren voordat de waarde van een gebruiker wordt geaccepteerd.

Bekijk het volgende voorbeeld:

- (IBAction) showMessage: (id) afzender UIAlertView * message = [[UIAlertView alloc] initWithTitle: @ "Wat is uw telefoonnummer?" message: nel delegate: self cancelButtonTitle: @ "Cancel" otherButtonTitles: @ "Continue", nil]; [message setAlertViewStyle: UIAlertViewStylePlainTextInput]; [berichtenscherm];  - (BOOL) alertViewShouldEnableFirstOtherButton: (UIAlertView *) alertView NSString * inputText = [[alertView textFieldAtIndex: 0] tekst]; if ([inputText length]> = 10) return YES;  else return NO; 

Met de bovenstaande code kan de gebruiker alleen op de knop "Doorgaan" drukken nadat ze ten minste 10 tekens in het formulierveld hebben ingevoerd. Ik weet zeker dat je je eigen validatie robuuster wilt maken, maar dit eenvoudige voorbeeld laat zien hoe nuttig deze nieuwe deelnemersmethode kan zijn..