No se puede agregar UITextField a UIAlertView en iOS7 … funciona en iOS 6

El siguiente código funciona en iOS6 (y antes) pero el UITextField no se muestra en iOS7 … ¿Alguna idea sobre cómo obtener un UITextField para mostrar en un UIAlterView en 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]; 

El código ejecutado para iOS6 muestra esto:

enter image description here

el mismo código en iOS7 muestra esto (observe cómo falta el campo UITextField y no hay teclado):

enter image description here

No puede modificar fácilmente la jerarquía de vistas de un UIAlertView en iOS 7. (Tampoco debería hacerlo; la documentación específicamente le indica que no lo haga). Diríjase a los foros de desarrolladores para ver una larga discusión al respecto.

Una alternativa en su caso es establecer alert.alertViewStyle = UIAlertViewStylePlainTextInput; Esto agregará un campo de texto para ti. Puede acceder a él en la callback del delegado de UITextField *textField = [alertView textFieldAtIndex:0]; utilizando UITextField *textField = [alertView textFieldAtIndex:0]; .

@Aaron Brager tuvo la solución correcta. Además, agregué una línea después de su sugerencia de usar un teclado numérico predeterminado.

 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]; 

Solo trabajando como encanto

Dos UITextField en UIAlertView para todas las versiones de 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) En el método – (id) initWithAlertTitle: (NSString *) title checkForPassword: (NSString *) contraseña
deberías agregar

 self.alertViewStyle = UIAlertViewStylePlainTextInput; 

muestra:

 (id)initWithAlertTitle:(NSString *)title checkForPassword:(NSString *)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; } 

en el método 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]; } 

también hacer cambios en el método clic

 #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 isEqualToString:secondMessage] || [self.title isEqualToString:secondMessageNew]) { if (([self.title isEqualToString:secondMessage] || [self.title isEqualToString: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 isEqualToString: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 isEqualToString: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]; } } } 

También puede consultar el control personalizado en cocoacontrols.com. Eche un vistazo a MLAertView (ios 7 como UI) y TSAlertView (ios 6 como UI). También se pueden transformar a un ángulo de rotación.

También estoy enfrentando el mismo problema. Durante la navegación, recibí la respuesta que funciona para mí. Espero que también te funcione.

 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); }