lundi 6 février 2012

Voir d'alerte avec l'invite

Voici une autre classe générique pour vous. Celui-ci ne nécessite pas une application de navigation - il peut être utilisé pratiquement n'importe où. Il s'agit d'une mesure sous-classe de UIAlertView qui permet à l'utilisateur de saisir une valeur. Il soutient que deux boutons - Okay et Annuler - mais il gère tout à voir avec le champ de texte pour vous. Elle ressemble à ceci:


Vous pouvez l'utiliser à peu près la même manière que vous utilisez un affichage des alertes. Vous attribuer et de l'initialiser, appelez spectacle et puis le relâcher:

    AlertPrompt *prompt = [AlertPrompt alloc];
prompt = [prompt initWithTitle:@"Test Prompt" message:@"Please enter some text in" delegate:self cancelButtonTitle:@"Cancel" okButtonTitle:@"Okay"];
[prompt show];
[prompt release];

Ensuite, vous mettez en œuvre la méthode de rappel appropriée UIAlertView, et saisir le texte saisi par l'instance affichage des alertes. Vous avez de jeter l'affichage des alertes retour à une instance AlertPrompt, mais à part ça, tout est la même que celle utilisant une norme UIAlertview:

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex != [alertView cancelButtonIndex])
{
NSString *entered = [(AlertPrompt *)alertView enteredText];
label.text = [NSString stringWithFormat:@"You typed: %@", entered];
}

}


Vous pouvez télécharger un exemple de projet qui montre comment cela fonctionne ici.

Note: pour ceux d'entre vous me demandais si cela viole le HIG, ou va causer des problèmes lors de l'examen - Je ne pense pas qu'elle le devrait. Apple ne présente-mêmes quand ils vous demandera un mot de passe réseau WiFi, et je n'ai pas utilisé d'API privées ou fonctions que ce soit. Je viens de sous classer une classe existante publique et a étendu ses fonctionnalités d'une manière qui est fait couramment.

Le code de la classe suivante:

AlertPrompt.h
//
// AlertPrompt.h
// Prompt
//
// Created by Jeff LaMarche on 2/26/09.

#import <Foundation/Foundation.h>

@interface AlertPrompt : UIAlertView
{
UITextField *textField;
}

@property (nonatomic, retain) UITextField *textField;
@property (readonly) NSString *enteredText;
- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitle:(NSString *)okButtonTitle;
@end



AlertPrompt.m
//
// AlertPrompt.m
// Prompt
//
// Created by Jeff LaMarche on 2/26/09.

#import "AlertPrompt.h"

@implementation AlertPrompt
@synthesize textField;
@synthesize enteredText;
- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitle:(NSString *)okayButtonTitle
{

if (self = [super initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:okayButtonTitle, nil])
{
UITextField *theTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
[theTextField setBackgroundColor:[UIColor whiteColor]];
[self addSubview:theTextField];
self.textField = theTextField;
[theTextField release];
CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 130.0);
[self setTransform:translate];
}

return self;
}

- (void)show
{
[textField becomeFirstResponder];
[super show];
}

- (NSString *)enteredText
{
return textField.text;
}

- (void)dealloc
{
[textField release];
[super dealloc];
}

@end



Aucun commentaire: