web-dev-qa-db-fra.com

Gestionnaire d'écriture pour UIAlertAction

Je présente un UIAlertView à l'utilisateur et je ne sais pas comment écrire le gestionnaire. Ceci est ma tentative:

let alert = UIAlertController(title: "Title",
                            message: "Message",
                     preferredStyle: UIAlertControllerStyle.Alert)

alert.addAction(UIAlertAction(title: "Okay",
                              style: UIAlertActionStyle.Default,
                            handler: {self in println("Foo")})

Je reçois un tas de problèmes dans Xcode.

La documentation indique convenience init(title title: String!, style style: UIAlertActionStyle, handler handler: ((UIAlertAction!) -> Void)!)

L'ensemble des blocs/fermetures est un peu au dessus de ma tête pour le moment. Toute suggestion est très appréciée.

88
Steve Marshall

Au lieu de vous-même dans votre gestionnaire, mettez (alert: UIAlertAction!). Cela devrait faire ressembler votre code à ceci

    alert.addAction(UIAlertAction(title: "Okay",
                          style: UIAlertActionStyle.Default,
                        handler: {(alert: UIAlertAction!) in println("Foo")}))

c'est la bonne façon de définir les gestionnaires dans Swift.

Comme Brian l'a souligné ci-dessous, il existe également des moyens plus simples de définir ces gestionnaires. L’utilisation de ses méthodes est décrite dans le livre. Consultez la section intitulée Fermetures.

148
jbman223

Les fonctions sont des objets de première classe dans Swift. Donc, si vous ne souhaitez pas utiliser une fermeture, vous pouvez également simplement définir une fonction avec la signature appropriée, puis la transmettre en tant qu'argument handler. Observer:

func someHandler(alert: UIAlertAction!) {
    // Do something...
}

alert.addAction(UIAlertAction(title: "Okay",
                              style: UIAlertActionStyle.Default,
                              handler: someHandler))
66
Rob Johansen

Vous pouvez le faire aussi simplement que cela en utilisant Swift 2:

    let alertController = UIAlertController(title: "iOScreator", message:
                "Hello, world!", preferredStyle: UIAlertControllerStyle.Alert)
            alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Destructive,handler: { action in
                self.pressed()
            }))

func pressed()
    {
        print("you pressed")
    }

ou

let alertController = UIAlertController(title: "iOScreator", message:
                    "Hello, world!", preferredStyle: UIAlertControllerStyle.Alert)
                alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Destructive,handler: { action in
                    print("pressed")
                }))

Toutes les réponses ci-dessus sont correctes, je ne fais que montrer une autre façon de procéder.

14
Korpel

Supposons que vous souhaitiez une UIAlertAction avec un titre principal, deux actions (enregistrer et annuler) et un bouton d'annulation:

let actionSheetController = UIAlertController (title: "My Action Title", message: "", preferredStyle: UIAlertControllerStyle.ActionSheet)

    //Add Cancel-Action
    actionSheetController.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))

    //Add Save-Action
    actionSheetController.addAction(UIAlertAction(title: "Save", style: UIAlertActionStyle.Default, handler: { (actionSheetController) -> Void in
        print("handle Save action...")
    }))

    //Add Discard-Action
    actionSheetController.addAction(UIAlertAction(title: "Discard", style: UIAlertActionStyle.Default, handler: { (actionSheetController) -> Void in
        print("handle Discard action ...")
    }))

    //present actionSheetController
    presentViewController(actionSheetController, animated: true, completion: nil)

Cela fonctionne pour Swift 2 (Xcode Version 7.0 beta 3)

10
polarwar

Changement de syntaxe dans Swift 3.

alert.addAction(UIAlertAction(title: "Okay",
                style: .default,
                handler: { _ in print("Foo") } ))
5
Fangming

voici comment je le fais avec xcode 7.3.1

// create function
func sayhi(){
  print("hello")
}

// crée le bouton

let sayinghi = UIAlertAction(title: "More", style: UIAlertActionStyle.Default, handler:  { action in
            self.sayhi()})

// ajout du bouton au contrôle d'alerte

myAlert.addAction(sayhi);

// tout le code, ce code ajoutera 2 boutons

  @IBAction func sayhi(sender: AnyObject) {
        let myAlert = UIAlertController(title: "Alert", message:"sup", preferredStyle: UIAlertControllerStyle.Alert);
        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:nil)

        let sayhi = UIAlertAction(title: "say hi", style: UIAlertActionStyle.Default, handler:  { action in
            self.sayhi()})

        // this action can add to more button
        myAlert.addAction(okAction);
        myAlert.addAction(sayhi);

        self.presentViewController(myAlert, animated: true, completion: nil)
    }

    func sayhi(){
        // move to tabbarcontroller
     print("hello")
    }
4
Alan

dans Swift4: let alert = UIAlertController (titre: "someAlert", message: "someMessage", preferredStyle: UIAlertControllerStyle.alert)

    alert.addAction(UIAlertAction(title: "ok", style: UIAlertActionStyle.default, handler: {
        _ in print("FOO ")
    }))

présent (alerte, animé: vrai, achèvement: nul)

3

créer une alerte, testé dans xcode 9

let alert = UIAlertController(title: "title", message: "message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: self.finishAlert))
self.present(alert, animated: true, completion: nil)

et la fonction

func finishAlert(alert: UIAlertAction!)
{
}
2
luhuiya
  1. En rapide

    let alertController = UIAlertController(title:"Title", message: "Message", preferredStyle:.alert)
    
    let Action = UIAlertAction.init(title: "Ok", style: .default) { (UIAlertAction) in
        // Write Your code Here
    }
    
    alertController.addAction(Action)
    self.present(alertController, animated: true, completion: nil)
    
  2. En objectif c

    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction *OK = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action)
    {
    }];
    
    [alertController addAction:OK];
    
    [self presentViewController:alertController animated:YES completion:nil];
    
1