objective alerta objective-c ios7 uitextfield uialertview uialertviewdelegate

objective c - alerta - No se puede agregar UITextField a UIAlertView en iOS7... funciona en iOS 6



uialertcontroller swift 4 (7)

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

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:

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


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


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 devolución de llamada del delegado de UITextField *textField = [alertView textFieldAtIndex:0]; utilizando UITextField *textField = [alertView textFieldAtIndex:0]; .


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


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


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.


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