ios objective-c uitextfield uialertcontroller

ios - ¿Cómo agregar textField en UIAlertController?



objective-c uitextfield (3)

Quiero realizar una función para cambiar la contraseña, requiere que el usuario ingrese su contraseña anterior, y la diseño en un diálogo de alerta, quiero hacer clic en el botón "Confirmar la modificación" y luego saltar al otro controlador de vista para cambiar la contraseña. He escrito un código, pero no sé cómo escribir en el próximo momento.


Aquí hay una respuesta actualizada para Swift 4.0 que crea el tipo de campo de texto deseado:

// Create a standard UIAlertController let alertController = UIAlertController(title: "Password Entry", message: "", preferredStyle: .alert) // Add a textField to your controller, with a placeholder value & secure entry enabled alertController.addTextField { textField in textField.placeholder = "Enter password" textField.isSecureTextEntry = true textField.textAlignment = .center } // A cancel action let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { _ in print("Canelled") } // This action handles your confirmation action let confirmAction = UIAlertAction(title: "OK", style: .default) { _ in print("Current password value: /(alertController.textFields?.first?.text ?? "None")") } // Add the actions, the order here does not matter alertController.addAction(cancelAction) alertController.addAction(confirmAction) // Present to user present(alertController, animated: true, completion: nil)

Y cómo se ve cuando se presenta por primera vez:

Y mientras acepta texto:


Obtendrá todos los campos de texto agregados del controlador de alertas mediante su propiedad de solo texto de textFields , puede usarlo para obtener su texto. Me gusta

Swift 4:

let alertController = UIAlertController(title: "", message: "", preferredStyle: .alert) alertController.addTextField { textField in textField.placeholder = "Password" textField.isSecureTextEntry = true } let confirmAction = UIAlertAction(title: "OK", style: .default) { [weak alertController] _ in guard let alertController = alertController, let textField = alertController.textFields?.first else { return } print("Current password /(String(describing: textField.text))") //compare the current password and do action here } alertController.addAction(confirmAction) let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) alertController.addAction(cancelAction) present(alertController, animated: true, completion: nil)

Nota: textField.text es opcional, desenvuélvalo antes de usar

C objetivo:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleAlert]; [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { textField.placeholder = @"Current password"; textField.secureTextEntry = YES; }]; UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { NSLog(@"Current password %@", [[alertController textFields][0] text]); //compare the current password and do action here }]; [alertController addAction:confirmAction]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { NSLog(@"Canelled"); }]; [alertController addAction:cancelAction]; [self presentViewController:alertController animated:YES completion:nil];

Por [[alertController textFields][0] text] esta línea, tomará el primer campo de texto agregado al alerController y obtendrá su texto.


Puede agregar varios campos de texto para alertar al controlador y acceder a ellos con la propiedad textFields del controlador de alerta

Si la nueva contraseña es cadena vacía, presente la alerta nuevamente. O de otra manera ... primero deshabilite el botón Confirmar, habilítelo solo cuando el campo de texto tenga texto

UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"confirm the modification" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { UITextField *password = alertController.textFields.firstObject; if (![password.text isEqualToString:@""]) { //change password } else{ [self presentViewController:alertController animated:YES completion:nil]; } }];