Impossible d’append UITextField à UIAlertView sur iOS7… fonctionne dans iOS 6

Le code ci-dessous fonctionne sur iOS6 (et avant), mais UITextField ne s’affiche pas dans iOS7 … des idées sur la manière d’afficher un UITextField dans un UIAlterView dans iOS7?

UIAlertView* dialog = [[UIAlertView alloc] init]; [dialog setDelegate:self]; [dialog setTitle:@"Enter ESC Score"]; [dialog setMessage:@" "]; [dialog addButtonWithTitle:@"Cancel"]; [dialog addButtonWithTitle:@"OK"]; dialog.tag = 5; nameField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)]; [nameField setKeyboardType:UIKeyboardTypeNumberPad]; [nameField becomeFirstResponder]; [nameField setBackgroundColor:[UIColor whiteColor]]; [dialog addSubview:nameField]; CGAffineTransform moveUp = CGAffineTransformMakeTranslation(0.0, 0.0); [dialog setTransform: moveUp]; [dialog show]; [dialog release]; [nameField release]; 

L’exécution du code pour iOS6 affiche ceci:

entrer la description de l'image ici

le même code dans iOS7 affiche ceci (notez comment UITextField est manquant et qu’il n’y a pas de clavier):

entrer la description de l'image ici

Vous ne pouvez pas facilement modifier la hiérarchie des vues d’un UIAlertView dans iOS 7. (Vous ne devriez pas non plus, la documentation vous indique expressément de ne pas le faire.) Consultez les forums de développeurs pour en savoir plus.

Une alternative dans votre cas consiste à définir alert.alertViewStyle = UIAlertViewStylePlainTextInput; Cela va append un champ de texte pour vous. Vous pouvez y accéder dans le callback délégué UIAlertView en utilisant UITextField *textField = [alertView textFieldAtIndex:0]; .

@Aaron Brager avait la bonne solution. De plus, j’ai ajouté une ligne après sa suggestion pour utiliser un pavé numérique.

 UIAlertView* dialog = [[UIAlertView alloc] init]; [dialog setDelegate:self]; [dialog setTitle:@"Enter ESC Score"]; [dialog setMessage:@" "]; [dialog addButtonWithTitle:@"Cancel"]; [dialog addButtonWithTitle:@"OK"]; dialog.tag = 5; dialog.alertViewStyle = UIAlertViewStylePlainTextInput; [dialog textFieldAtIndex:0].keyboardType = UIKeyboardTypeNumberPad; CGAffineTransform moveUp = CGAffineTransformMakeTranslation(0.0, 0.0); [dialog setTransform: moveUp]; [dialog show]; [dialog release]; 
 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Credit Card Number" message:@"Please enter your credit card number:" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; [alertView setAlertViewStyle:UIAlertViewStylePlainTextInput]; /* Display a numerical keypad for this text field */ UITextField *textField = [alertView textFieldAtIndex:0]; textField.keyboardType = UIKeyboardTypeNumberPad; [alertView show]; 

Travailler comme charme

Deux UITextField dans UIAlertView pour toutes les versions d’iOS

 -(IBAction) showAlertView { UIAlertView *alert; UITextField *callForwardNumber; UItextField *callForwardCondition; alert = [[UIAlertView alloc] initWithTitle:@"Enter Phone Number & Rule" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Save", nil]; //alert.transform = CGAffineTransformMakeTranslation(0, 110); callForwardNumber = [[UITextField alloc] init]; callForwardNumber.keyboardType = UIKeyboardTypeNumberPad; callForwardNumber.text = [R.prefs objectForKey:@"fwd_number"]; callForwardNumber.borderStyle = UITextBorderStyleRoundedRect; callForwardNumber.delegate = self; callForwardNumber.tag = 1; callForwardCondition = [[UITextField alloc] init]; callForwardCondition.text = callCondition; callForwardCondition.borderStyle = UITextBorderStyleRoundedRect; callForwardCondition.delegate = self; callForwardCondition.tag = 2; [callForwardCondition setKeyboardType:UIKeyboardTypeNumberPad]; if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { UIView* customAccessory = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 250, 55)]; callForwardNumber.frame = CGRectMake(0, 0, 245.0, 25.0); callForwardCondition.frame = CGRectMake(0, 30.0, 245.0, 25.0); [customAccessory addSubview:callForwardNumber]; [customAccessory addSubview:callForwardCondition]; [alert setValue:customAccessory forKey:@"accessoryView"]; [alert show]; } else { alert.message = @"\n\n\n"; [alert show]; callForwardNumber.frame = CGRectMake(20.0, 45.0, 245.0, 25.0); callForwardCondition.frame = CGRectMake(20.0, 75.0, 245.0, 25.0); [alert addSubview:callForwardNumber]; [alert addSubview:callForwardCondition]; } } 

1) Dans la méthode – (id) initWithAlertTitle: (NSSsortingng *) title checkForPassword: (NSSsortingng *) mot de passe
vous devriez append

 self.alertViewStyle = UIAlertViewStylePlainTextInput; 

échantillon:

 (id)initWithAlertTitle:(NSSsortingng *)title checkForPassword:(NSSsortingng *)password{ if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { self.alertViewStyle = UIAlertViewStylePlainTextInput; } self = [super initWithTitle:title message:@"" // password field will go here delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Enter", nil]; if (self) { self.password = password; self.hashTechnique = HashTechniqueNone; // use no hashing by default secondMessage = @"Please Enter New Password"; thirdMessage = @"Please Re-Enter Password"; secondMessageNew = @"Please Enter Password"; } NSLog(@" _password_ %@",_password); NSLog(@"_old_password_ %@",[[NSUserDefaults standardUserDefaults] objectForKey:kPassword]); return self; } 

dans la méthode show add next

 (void)show { if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { UITextField *passwordField = [self textFieldAtIndex:0]; passwordField.delegate = self; self.passwordField = passwordField; } else { UITextField *passwordField = [[UITextField alloc] initWithFrame:CGRectMake(14, 45, 256, 25)]; passwordField.secureTextEntry = YES; passwordField.placeholder = @""; passwordField.backgroundColor = [UIColor whiteColor]; // Pad out the left side of the view to properly inset the text UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 6, 19)]; passwordField.leftView = paddingView; passwordField.leftViewMode = UITextFieldViewModeAlways; // // Set delegate self.passwordField.delegate = self; // Set as property self.passwordField = passwordField; // Add to subview [self addSubview:_passwordField]; } // Show alert [super show]; } 

Faites également des changements dans la méthode cliquez

 #pragma mark - UIAlertViewDelegate - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { UITextField *passwordField = [self textFieldAtIndex:0]; self.passwordField = passwordField; } if (buttonIndex == alertView.firstOtherButtonIndex) { if ([self enteredTextIsCorrect] || [self.title isEqualToSsortingng:secondMessage] || [self.title isEqualToSsortingng:secondMessageNew]) { if (([self.title isEqualToSsortingng:secondMessage] || [self.title isEqualToSsortingng:secondMessageNew]) && (self.passwordField.text.length > 0)) { self.password = self.passwordField.text; self.title = thirdMessage; self.passwordField.text = @""; if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { if ([self.passwordDelegate respondsToSelector:@selector(notifyParent::)]) { [self.passwordDelegate notifyParent:thirdMessage:self.password]; } } }else { if ([self.title isEqualToSsortingng:thirdMessage]) { [[NSUserDefaults standardUserDefaults] setObject:self.password forKey:kPassword]; [[NSUserDefaults standardUserDefaults] synchronize]; if (self.passwordDelegate) { if ([self.passwordDelegate respondsToSelector:@selector(notifyParentWithState:)]) { [self.passwordDelegate notifyParentWithState:YES]; } } }else{ if ([self.title isEqualToSsortingng:secondMessageNew]) { self.title = secondMessageNew; } else{ self.title = secondMessage; } self.passwordField.text = @""; if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { if ([self.passwordDelegate respondsToSelector:@selector(notifyParent::)]) { [self.passwordDelegate notifyParent:self.title:self.password]; } } } } } // If incorrect then animate else { [self animateIncorrectPassword]; } } } 

Vous pouvez également consulter le contrôle personnalisé sur cocoacontrols.com. Jetez un oeil à MLAertView (ios 7 comme UI) et TSAlertView (ios 6 comme interface utilisateur). Ils peuvent également être transformés en un angle de rotation.

Je suis également confronté au même problème. Pendant le surf, j’ai eu la réponse que cela fonctionnait pour moi. J’espère que cela fonctionnera aussi pour vous.

 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Folder Name?" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; alertView.tag = 2; alertView.alertViewStyle = UIAlertViewStylePlainTextInput; [alertView show]; - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { UITextField * alertTextField = [alertView textFieldAtIndex:0]; NSLog(@"alerttextfiled - %@",alertTextField.text); }