iOS 5 SDK Saisie de texte UIAlertView et validation

Avec la publication du SDK iOS 5, la classe UIAlertView a été mise à jour pour prendre en charge de manière native la saisie de texte, la saisie de texte sécurisée et les champs de formulaire de nom d'utilisateur / mot de passe. Cette astuce vous montrera comment tirer parti de ces nouvelles améliorations.!

Dans un précédent tutoriel complet pour les débutants, j'ai expliqué au lecteur comment configurer un projet avec un bouton et un arrière-plan personnalisés. Je vais utiliser le projet créé dans ce tutoriel comme point de départ pour celui-ci.

Présentation des styles de vue d'alerte

Les éléments de mise en page et de forme d'un UIAlertView peut maintenant être contrôlé facilement et rapidement en réglant la alertViewStyle propriété. Les options possibles pour cette propriété incluent:

UIAlertViewStylePlainTextInput

Ce style ajoutera un seul champ de texte à la vue des alertes:

UIAlertViewStyleSecureTextInput

Ce style est semblable au champ de texte brut, sauf que tous les caractères entrés seront masqués:

UIAlertViewStyleLoginAndPasswordInput

La définition de cette valeur pour la propriété style ajoute une entrée de champ de texte normal pour un nom d'utilisateur et une entrée de champ de texte sécurisé pour un mot de passe:

UIAlertViewStyleDefault

C'est le style par défaut que nous connaissons et aimons tous:

la mise en oeuvre

Tous les styles ci-dessus sont aussi faciles à implémenter que de définir le alertViewStyle propriété sur votre UIAlertView, soit avec notation à points:

message.alertViewStyle = UIAlertViewStylePlainTextInput;

Ou en appelant directement la méthode setter:

[message setAlertViewStyle: UIAlertViewStylePlainTextInput];

C'est tout! Une fois que vous avez défini cette propriété, l'affichage de la vue d'alerte sera ajusté en conséquence..

Bien sûr, l'affichage de champs de texte dans la vue des alertes ne sera pas très utile, à moins que vous ne puissiez également accéder à la valeur saisie par l'utilisateur. Ceci est fait avec le textFieldAtIndex: méthode. Vous fournissez simplement l’index du champ texte auquel vous souhaitez accéder (0 - 1 dans les exemples ci-dessus), ainsi UITextField l'objet est retourné.

Pour un exemple de la façon dont cela pourrait fonctionner, considérons le -alertView: clickedButtonAtIndex: méthode de délégué que nous avons déjà implémentée dans le projet de démonstration attaché. Si nous changeons le style de vue d'alerte en UIAlertViewStyleLoginAndPasswordInput et changez le titre du bouton par défaut en "Login", nous pourrions alors accéder aux valeurs entrées par l'utilisateur dans la méthode déléguée comme ceci:

- (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex NSString * title = [alertView buttonTitleAtIndex: buttonIndex]; if ([title isEqualToString: @ "Login"]) UITextField * username = [alertView textFieldAtIndex: 0]; UITextField * password = [alertView textFieldAtIndex: 1]; NSLog (@ "Nom d'utilisateur:% @ \ n Mot de passe:% @", nom d'utilisateur.text, mot de passe.text); 

Pièges potentiels

L’utilisation des nouveaux styles d’alerte peut se retourner contre vous de différentes manières..

Trop de boutons

Si vous ajoutez aussi peu que trois boutons à la UIAlertView, la disposition de chaque nouveau style deviendra asymétrique.

Tous les nouveaux styles peuvent gérer facilement 2 boutons, mais le style par défaut utilisé dans le passé peut en gérer jusqu'à 6 lorsque le titre et le message sont supprimés:

Trop de texte

le UIAlertViewStyleLoginAndPasswordInput style ne peut pas gérer le texte en débordement de la même manière que les autres styles peuvent:

Même en entrant juste un bref message du type "Vous devez entrer un nom d'utilisateur et un mot de passe." était suffisant pour ruiner l'esthétique.

Validation de la saisie

Outre les styles de boutons décrits ci-dessus, le SDK iOS 5 a également introduit un nouveau UIAlertViewDelegate méthode, -alertViewShouldEnableFirstOtherButton:. Cette méthode est appelée à la fois lorsque la vue d'alerte est affichée et à chaque fois que l'utilisateur tape un caractère dans l'un des champs de texte, ce qui facilite grandement la validation de base des entrées avant l'acceptation de la valeur d'un utilisateur..

Prenons l'exemple suivant:

- (IBAction) showMessage: (id) expéditeur UIAlertView * message = [[UIAlertView alloc] initWithTitle: @ "Quel est votre numéro de téléphone?" message: nil delegate: self cancelButtonTitle: @ "Annuler" otherButtonTitles: @ "Continue", nil]; [message setAlertViewStyle: UIAlertViewStylePlainTextInput]; [émission de messages];  - (BOOL) alertViewShouldEnableFirstOtherButton: (UIAlertView *) alertView NSString * inputText = [[alertView textFieldAtIndex: 0] text]; if ([inputText length]> = 10) retourne YES;  else return NO; 

Le code ci-dessus ne permettra à l'utilisateur d'appuyer sur le bouton "Continuer" qu'après avoir saisi au moins 10 caractères dans le champ de formulaire. Je suis sûr que vous voudrez rendre votre propre validation plus robuste, mais cet exemple basique montre à quel point cette nouvelle méthode de délégation peut être utile..