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