Saltar al contenido

Habilite UIAlertAction de UIAlertController solo después de la entrada

Basta ya de buscar por todo internet ya que has llegado al espacio justo, contamos con la solución que deseas pero sin problema.

Solución:

Puede agregar un observador a su UITextField:

[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) 
    [textField addTarget:self action:@selector(alertControllerTextFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

pero primero deshabilite su botón:

okAction.enabled = NO;

Luego validarlo en el método que especificó:

- (void)alertTextFieldDidChange:(UITextField *)sender 
  UIAlertController *alertController = (UIAlertController *)self.presentedViewController;
  if (alertController) 
    UITextField *someTextField = alertController.textFields.firstObject;
    UIAlertAction *okAction = alertController.actions.lastObject;
    okAction.enabled = someTextField.text.length > 2;
  

Agregue la siguiente propiedad en su archivo de encabezado

@property(nonatomic, strong)UIAlertAction *okAction;   

luego copie el siguiente código en su viewDidLoad método de su ViewController

self.okAction = [UIAlertAction actionWithTitle:@"OK"
                                         style:UIAlertActionStyleDefault
                                       handler:nil];
self.okAction.enabled = NO;

UIAlertController *controller = [UIAlertController alertControllerWithTitle:nil
                                                                    message:@"Enter your text"
                                                             preferredStyle:UIAlertControllerStyleAlert];

[controller addTextFieldWithConfigurationHandler:^(UITextField *textField) 

    textField.delegate = self;
];

[controller addAction:self.okAction];
[self presentViewController:controller animated:YES completion:nil];

También implemente lo siguiente UITextField método de delegado en su clase

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

    NSString *finalString = [textField.text stringByReplacingCharactersInRange:range withString:string];
   [self.okAction setEnabled:(finalString.length >= 5)];
   return YES;

Esto debería funcionar

Implementación de Swift 3 basada en brillo del almarespuesta de:

var someAlert: UIAlertController 
    let alert = UIAlertController(title: "Some Alert", message: nil, preferredStyle: .alert)

    alert.addTextField 
        $0.placeholder = "Write something"
        $0.addTarget(self, action: #selector(self.textFieldTextDidChange(_:)), for: .editingChanged)
    

    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))

    let submitAction = UIAlertAction(title: "Submit", style: .default)  _ in
        // Do something...
    

    submitAction.isEnabled = false
    alert.addAction(submitAction)
    return alert


func textFieldTextDidChange(_ textField: UITextField) 
    if let alert = presentedViewController as? UIAlertController,
        let action = alert.actions.last,
        let text = textField.text 
        action.isEnabled = text.characters.count > 0
    

Si crees que te ha sido útil este post, agradeceríamos que lo compartas con otros programadores y nos ayudes a dar difusión a nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *