J'ai besoin d'ajouter une TextField
à une UIAlertView
. Je comprends que Apple décourage cette approche. Donc, y a-t-il une bibliothèque que je pourrais utiliser pour ajouter un TextField
à un cadre UIAlertView
?
Pour iOS5:
UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"Title" message:@"Please enter someth" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
av.alertViewStyle = UIAlertViewStylePlainTextInput;
[av textFieldAtIndex:0].delegate = self;
[av show];
De plus, vous devrez implémenter les protocoles UITextFieldDelegate
, UIAlertViewDelegate
.
Malheureusement, la seule API officielle pour cela est iOS 5 et supérieur, c'est une propriété appelée alertViewStyle
qui peut être définie sur les paramètres suivants:
UIAlertViewStyleDefault
UIAlertViewStyleSecureTextInput
UIAlertViewStylePlainTextInput
UIAlertViewStyleLoginAndPasswordInput
UIAlertViewStylePlainTextInput
étant celui que vous voulez.
Il est fortement déconseillé de jouer avec la hiérarchie de vues décrite ci-dessus.
J'utilise BlockAlertsAndActionSheets au lieu des composants Apple pour AlertViews et ActionSheets, car je préfère l'approche par blocs. Contient également une BlockTextPromptAlertView
dans le source, ce qui pourrait être ce que vous voulez. Vous pouvez remplacer les images de ce contrôle pour récupérer le style Apple.
Tutoriel qui vous aide à démarrer
Exemple:
- (IBAction)newFolder:(id)sender {
id selfDelegate = self;
UITextField *textField;
BlockTextPromptAlertView *alert = [BlockTextPromptAlertView promptWithTitle :@"New Folder"
message :@"Please enter the name of the new folder!"
textField :&textField];
[alert setCancelButtonWithTitle:@"Cancel" block:nil];
[alert addButtonWithTitle:@"Okay" block:^{
[selfDelegate createFolder:textField.text];
}];
[alert show];
}
- (void)createFolder:(NSString*)folderName {
// do stuff
}
Essayez quelque chose comme ça:
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Title"
message:@"\n\n"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Save", nil] autorelease];
CGRect rect = {12, 60, 260, 25};
UITextField *dirField = [[[UITextField alloc] initWithFrame:rect] autorelease];
dirField.backgroundColor = [UIColor whiteColor];
[dirField becomeFirstResponder];
[alert addSubview:dirField];
[alert show];
Depuis iOS 8, UIAlertView
est déconseillé en faveur de UIAlertController
, ce qui ajoute la prise en charge de l'ajout de UITextField
s à l'aide de la méthode
- (void)addTextFieldWithConfigurationHandler:(void (^)(UITextField *textField))configurationHandler;
Voir cette réponse pour un exemple.
Tu peux essayer:
UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Your title here!" message:@"this gets covered" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
[myTextField setBackgroundColor:[UIColor whiteColor]];
[myAlertView addSubview:testTextField];
[myAlertView show];
[myAlertView release];
Suivez ce link pour plus de détails.
tout d'abord Ajoutez UIAlertViewDelegate dans le fichier ViewController.h comme
#import <UIKit/UIKit.h>
@interface UIViewController : UITableViewController<UIAlertViewDelegate>
@end
et que Ajouter ci-dessous le code où vous souhaitez alerter l'affichage,
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title"
message:@"Message"
delegate:self
cancelButtonTitle:@"Done"
otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];
et sa méthode déléguée qui retourne quelle entrée de UItextField
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"%@", [alertView textFieldAtIndex:0].text);
}
refer this ... http://iosdevelopertips.com/undocumented/alert-with-textfields.htmlceci est une api privée et si vous l'utilisez pour app in appstore, elle peut être rejetée, mais c'est bien pour développement d'entreprise.
en ajoutant à la réponse de 'Shmidt', le code pour capturer le texte saisi dans UIAlertView est collé ci-dessous (merci 'Wayne Hartman' Obtenir du texte depuis UIAlertView )
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
self.userNumber = [alertView textFieldAtIndex:0].text;
if (self.userNumber) {
// user enetered value
NSLog(@"self.userNumber: %@",self.userNumber);
} else {
NSLog(@"null");
}
}
}