Recherche…


Remarques

Un objet UIAlertController affiche un message d'alerte à l'utilisateur. Cette classe remplace les classes UIActionSheet et UIAlertView pour l'affichage des alertes. Après avoir configuré le contrôleur d'alerte avec les actions et le style souhaités, présentez-le à l'aide de la méthode presentViewController:animated:completion: method.

De la documentation d'Apple

UIAlertController dans Swift

AlertViews avec UIAlertController

UIAlertView et UIActionSheet sont UIActionSheet dans iOS 8 et UIActionSheet ultérieures. Ainsi, Apple a introduit un nouveau contrôleur pour AlertView et ActionSheet appelé UIAlertController , modifiant le UIAlertController preferredStyle , vous pouvez basculer entre AlertView et ActionSheet . Il n'y a pas de méthode de délégué car tous les événements de bouton sont traités dans leurs blocs.

Simple AlertView

Rapide:

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)

Objectif c:

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

entrer la description de l'image ici

Alerte destructiveVoir

Rapide:

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)

Objectif c:

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

entrer la description de l'image ici

Pop up temporaire en forme de pain grillé

Bon pour les notifications rapides qui ne nécessitent pas d'interaction.

Rapide

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

Ajouter un champ de texte dans UIAlertController comme une boîte d'invite

Rapide

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)

Objectif c

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

entrer la description de l'image ici

Feuilles d'action avec UIAlertController

Avec UIAlertController , des feuilles d'action telles que la UIActionSheet sont créées avec la même API que celle utilisée pour AlertViews.

Feuille d'action simple avec deux boutons

Rapide

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

Objectif c

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

Créez les boutons "Annuler" et "OK"

Rapide

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
}

Objectif c

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

Et ajoutez-les à la fiche d'action:

Rapide

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

Objectif c

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

Présentez maintenant le UIAlertController :

Rapide

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

Objectif c

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

Cela devrait être le résultat:

Exemple de feuille d'action UIAlertController

Feuille d'action avec bouton destructeur

En utilisant le UIAlertActionStyle .destructive pour UIAlertAction , vous créez un bouton avec une couleur rouge.

Bouton destructeur

Pour cet exemple, okAction ci-dessus a été remplacé par cette UIAlertAction :

Rapide

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

Objectif c

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

Affichage et traitement des alertes

Un bouton

entrer la description de l'image ici

Rapide

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

Deux boutons

entrer la description de l'image ici

Rapide

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

Trois boutons

entrer la description de l'image ici

Rapide

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

Manipulation des boutons

Le handler était nil dans les exemples ci-dessus. Vous pouvez remplacer nil par une fermeture pour faire quelque chose lorsque l'utilisateur appuie sur un bouton, comme dans l'exemple ci-dessous:

Rapide

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

Remarques

  • Plusieurs boutons n'ont pas nécessairement besoin d'utiliser différents types UIAlertActionStyle . Ils pourraient tous être .Default .
  • Pour plus de trois boutons, envisagez d'utiliser une feuille d'action. La configuration est très similaire. Voici un exemple.

Mettre en évidence un bouton d'action

Le contrôleur d'alertes possède une propriété qui permet de mettre l'accent sur une action ajoutée dans le contrôleur d'alertes. Cette propriété peut être utilisée pour mettre en évidence une action particulière à l'attention de l'utilisateur. Pour l'objectif C;

@property(nonatomic, strong) UIAlertAction *preferredAction

Une action déjà ajoutée dans le contrôleur d'alertes peut être affectée à cette propriété. Le contrôleur d'alertes mettra en évidence cette action.

Cette propriété ne peut être utilisée qu'avec UIAlertControllerStyleAlert.

L'exemple suivant montre comment l'utiliser.

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

Alert Controller avec le jeu d'action préféré . Le bouton NO est en surbrillance.

entrer la description de l'image ici

Alert Controller avec l' action préférée non définie . Le bouton NO n'est pas en surbrillance.

entrer la description de l'image ici



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow