Buscar..


Observaciones

Un objeto UIAlertController muestra un mensaje de alerta para el usuario. Esta clase reemplaza las clases UIActionSheet y UIAlertView para mostrar alertas. Después de configurar el controlador de alertas con las acciones y el estilo que desea, presentViewController:animated:completion: utilizando el presentViewController:animated:completion:

De la documentación de Apple

UIAlertController en Swift

AlertViews con UIAlertController

UIAlertView y UIActionSheet están en UIActionSheet en iOS 8 y iOS 8 posteriores. Así que Apple presentó un nuevo controlador para AlertView y ActionSheet llamado UIAlertController , cambiando el estilo preferredStyle , puede cambiar entre AlertView y ActionSheet . No hay un método de delegado para ello porque todos los eventos de botones se manejan en sus bloques.

AlertView simple

Rápido:

let alert = UIAlertController(title: "Simple", message: "Simple alertView demo with Cancel and OK.", preferredStyle: .alert)

alert.addAction(UIAlertAction(title: "Cancel", style: .cancel) { _ in
        print("Cancel")
})
alert.addAction(UIAlertAction(title: "OK", style: .default) { _ in
        print("OK")
})

present(alert, animated: true)

C objetivo:

 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Simple" message:@"Simple alertView demo with Cancel and OK." preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
        NSLog(@"Cancel");
    }];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
        NSLog(@"OK");
    }];
    
    [alertController addAction:cancelAction];
    [alertController addAction:okAction];
    [self presentViewController:alertController animated: YES completion: nil];

introduzca la descripción de la imagen aquí

Vista de alerta destructiva

Rápido:

let alert = UIAlertController(title: "Simple", message: "Simple alertView demo with Cancel and OK.", preferredStyle: .alert)

alert.addAction(UIAlertAction(title: "Destructive", style: .destructive) { _ in
        print("Destructive")
})
alert.addAction(UIAlertAction(title: "OK", style: .default) { _ in
        print("OK")
})

present(alert, animated: true)

C objetivo:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Destructive" message:@"Simple alertView demo with Destructive and OK." preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *destructiveAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * action) {
        NSLog(@"Destructive");
    }];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
        NSLog(@"OK");
    }];
    
    [alertController addAction:destructiveAction];
    [alertController addAction:okAction];
    [self presentViewController:alertController animated: YES completion: nil];

introduzca la descripción de la imagen aquí

Pop-up temporal como un brindis

Bueno para notificaciones rápidas que no requieren interacción.

Rápido

let alert = UIAlertController(title: "Toast", message: "Hello World", preferredStyle: .Alert)

presentViewController(alert, animated: true) {
     let delay_s:Double = 2
     let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay_s * Double(NSEC_PER_SEC)))
     dispatch_after(delayTime, dispatch_get_main_queue()) {
          alert.dismissViewControllerAnimated(true, completion: nil)
     }
}

Agregar campo de texto en UIAlertController como un cuadro de solicitud

Rápido

let alert = UIAlertController(title: "Hello",
                              message: "Welcome to the world of iOS",
                              preferredStyle: UIAlertControllerStyle.alert)
let defaultAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) { (action) in
        
}
defaultAction.isEnabled = false
alert.addAction(defaultAction)
    
alert.addTextFieldWithConfigurationHandler { (textField) in
     textField.delegate = self
}
    
present(alert, animated: true, completion: nil)

C objetivo

UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Hello"
                                                               message:@"Welcome to the world of iOS"
                                                        preferredStyle:UIAlertControllerStyleAlert];
    
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" 
                                                        style:UIAlertActionStyleDefault
                                                      handler:^(UIAlertAction * action) {}];
    
defaultAction.enabled = NO;
[alert addAction:defaultAction];    
    
[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
     textField.delegate = self;
}];        

[self presentViewController:alert animated:YES completion:nil];

introduzca la descripción de la imagen aquí

Hojas de acción con UIAlertController

Con UIAlertController , las hojas de acción como la UIActionSheet obsoleta se crean con la misma API que utiliza para AlertViews.

Hoja de acción simple con dos botones

Rápido

let alertController = UIAlertController(title: "Demo", message: "A demo with two buttons", preferredStyle: UIAlertControllerStyle.actionSheet)

C objetivo

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Demo" message:@"A demo with two buttons" preferredStyle:UIAlertControllerStyleActionSheet];

Crea los botones "Cancelar" y "Bien"

Rápido

let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (result : UIAlertAction) -> Void in
    //action when pressed button
}
let okAction = UIAlertAction(title: "Okay", style: .default) { (result : UIAlertAction) -> Void in
    //action when pressed button
}

C objetivo

UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
        //action when pressed button
    }];

UIAlertAction * okAction = [UIAlertAction actionWithTitle:@"Okay" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
        //action when pressed button
    }];

Y añádelos a la hoja de acción:

Rápido

alertController.addAction(cancelAction)
alertController.addAction(okAction)

C objetivo

[alertController addAction:cancelAction];
[alertController addAction:okAction];

Ahora presente el UIAlertController :

Rápido

self.present(alertController, animated: true, completion: nil)

C objetivo

[self presentViewController:alertController animated: YES completion: nil];

Este debería ser el resultado:

Ejemplo de hoja de acción UIAlertController

Hoja de acción con botón destructivo

El uso de UIAlertActionStyle .destructive para una UIAlertAction creará un botón con un color de tinte rojo.

Botón destructivo

Para este ejemplo, la okAction de arriba fue reemplazada por esta UIAlertAction :

Rápido

let destructiveAction = UIAlertAction(title: "Delete", style: .destructive) { (result : UIAlertAction) -> Void in
    //action when pressed button
}

C objetivo

UIAlertAction * destructiveAction = [UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * action) {
            //action when pressed button
        }];

Visualización y manejo de alertas.

Un botón

introduzca la descripción de la imagen aquí

Rápido

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(sender: UIButton) {
        
        // create the alert
        let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertControllerStyle.Alert)
        
        // add an action (button)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

        // show the alert
        self.presentViewController(alert, animated: true, completion: nil)
    }
}

Dos botones

introduzca la descripción de la imagen aquí

Rápido

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(sender: UIButton) {
        
        // create the alert
        let alert = UIAlertController(title: "UIAlertController", message: "Would you like to continue learning how to use iOS alerts?", preferredStyle: UIAlertControllerStyle.Alert)
        
        // add the actions (buttons)
        alert.addAction(UIAlertAction(title: "Continue", style: UIAlertActionStyle.Default, handler: nil))
        alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
        
        // show the alert
        self.presentViewController(alert, animated: true, completion: nil)
    }
}

Tres botones

introduzca la descripción de la imagen aquí

Rápido

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(sender: UIButton) {
        
        // create the alert
        let alert = UIAlertController(title: "Notice", message: "Lauching this missile will destroy the entire universe. Is this what you intended to do?", preferredStyle: UIAlertControllerStyle.Alert)
        
        // add the actions (buttons)
        alert.addAction(UIAlertAction(title: "Remind Me Tomorrow", style: UIAlertActionStyle.Default, handler: nil))
        alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
        alert.addAction(UIAlertAction(title: "Launch the Missile", style: UIAlertActionStyle.Destructive, handler: nil))
        
        // show the alert
        self.presentViewController(alert, animated: true, completion: nil)
    }
}

Manipulación de botones

El handler fue nil en los ejemplos anteriores. Puede reemplazar nil con un cierre para hacer algo cuando el usuario toca un botón, como en el siguiente ejemplo:

Rápido

alert.addAction(UIAlertAction(title: "Launch the Missile", style: UIAlertActionStyle.Destructive, handler: { action in
    
    // do something like...
    self.launchMissile()
    
}))

Notas

  • Múltiples botones no necesariamente necesitan usar diferentes tipos de UIAlertActionStyle . Todos ellos podrían ser .Default .
  • Para más de tres botones considere usar una Hoja de Acción. La configuración es muy similar. Aquí hay un ejemplo.

Resaltando un botón de acción

El controlador de alertas tiene una propiedad que se utiliza para poner énfasis en una acción agregada en el controlador de alertas. Esta propiedad se puede usar para resaltar una acción particular para la atención del usuario. Para el objetivo C;

@property(nonatomic, strong) UIAlertAction *preferredAction

Se puede asignar una acción que ya se agregó en el controlador de alerta a esta propiedad. El Controlador de alertas destacará esta acción.

Esta propiedad solo se puede utilizar con UIAlertControllerStyleAlert.

El siguiente ejemplo muestra cómo usarlo.

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Cancel edit" message:@"Are you really want to cancel your edit?" preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
    NSLog(@"Cancel");
}];

UIAlertAction *no = [UIAlertAction actionWithTitle:@"NO" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
    NSLog(@"Highlighted button is pressed.");
}];

[alertController addAction:cancel];
[alertController addAction:no];

//add no action to preffered action.
//Note
//the action should already be added to alert controller
alertController.preferredAction = no;

[self presentViewController:alertController animated: YES completion: nil];

Controlador de alertas con conjunto de acciones preferidas . El botón NO está resaltado.

introduzca la descripción de la imagen aquí

Controlador de alertas con acción preferida no configurada . El botón NO no está resaltado.

introduzca la descripción de la imagen aquí



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow