Vue d'alerte rapide avec OK et Annuler: quel bouton a appuyé?

105

J'ai une vue d'alerte dans Xcode écrite en Swift et j'aimerais déterminer quel bouton l'utilisateur a sélectionné (c'est une boîte de dialogue de confirmation) pour ne rien faire ou pour exécuter quelque chose.

Actuellement j'ai:

@IBAction func pushedRefresh(sender: AnyObject) {
    var refreshAlert = UIAlertView()
    refreshAlert.title = "Refresh?"
    refreshAlert.message = "All data will be lost."
    refreshAlert.addButtonWithTitle("Cancel")
    refreshAlert.addButtonWithTitle("OK")
    refreshAlert.show()
}

J'utilise probablement mal les boutons, veuillez me corriger car c'est tout nouveau pour moi.

B_s
la source

Réponses:

303

Si vous utilisez iOS8, vous devez utiliser UIAlertController - UIAlertView est obsolète .

Voici un exemple de son utilisation:

var refreshAlert = UIAlertController(title: "Refresh", message: "All data will be lost.", preferredStyle: UIAlertControllerStyle.Alert)

refreshAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action: UIAlertAction!) in
  print("Handle Ok logic here")
  }))

refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: { (action: UIAlertAction!) in
  print("Handle Cancel Logic here")
  }))

presentViewController(refreshAlert, animated: true, completion: nil)

Comme vous pouvez le voir, les gestionnaires de blocs pour la gestion UIAlertAction que vous appuyez sur le bouton. Un excellent tutoriel est ici (bien que ce tutoriel ne soit pas écrit en utilisant swift): http://hayageek.com/uialertcontroller-example-ios/

Mise à jour de Swift 3:

let refreshAlert = UIAlertController(title: "Refresh", message: "All data will be lost.", preferredStyle: UIAlertControllerStyle.alert)

refreshAlert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action: UIAlertAction!) in
    print("Handle Ok logic here")
}))

refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { (action: UIAlertAction!) in
    print("Handle Cancel Logic here")
}))

present(refreshAlert, animated: true, completion: nil)

Mise à jour de Swift 5:

let refreshAlert = UIAlertController(title: "Refresh", message: "All data will be lost.", preferredStyle: UIAlertControllerStyle.alert)

refreshAlert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action: UIAlertAction!) in
      print("Handle Ok logic here")
}))

refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { (action: UIAlertAction!) in
      print("Handle Cancel Logic here")
}))

present(refreshAlert, animated: true, completion: nil)
Michael Wildermuth
la source
4
Vous pouvez utiliser le UIAlertActionStyle.Cancelplutôt que .Defaultdans votre exemple.
Tristan Warner-Smith
Si je ne veux rien faire dans l'action Annuler, je ne peux rien retourner?
Gabriel Rodrigues
Bien sûr, techniquement, je ne fais rien dans l'exemple à part la journalisation. Mais si je supprimais le journal, je ne ferais rien.
Michael Wildermuth
1
c'est tellement génial quand les réponses sont mises à jour pour les nouvelles versions de Swift
BlackTigerX
tout le monde sait comment ajouter un identifiant d'accessibilité aux actions "ok" et "annuler"
Kamaldeep singh Bhatia
18
var refreshAlert = UIAlertController(title: "Log Out", message: "Are You Sure to Log Out ? ", preferredStyle: UIAlertControllerStyle.Alert)

refreshAlert.addAction(UIAlertAction(title: "Confirm", style: .Default, handler: { (action: UIAlertAction!) in
    self.navigationController?.popToRootViewControllerAnimated(true)
}))

refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .Default, handler: { (action: UIAlertAction!) in

    refreshAlert .dismissViewControllerAnimated(true, completion: nil)


}))

presentViewController(refreshAlert, animated: true, completion: nil)
AG
la source
4

Mis à jour pour Swift 3:

// définition de la fonction:

@IBAction func showAlertDialog(_ sender: UIButton) {
        // Declare Alert
        let dialogMessage = UIAlertController(title: "Confirm", message: "Are you sure you want to Logout?", preferredStyle: .alert)

        // Create OK button with action handler
        let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in
             print("Ok button click...")
             self.logoutFun()
        })

        // Create Cancel button with action handlder
        let cancel = UIAlertAction(title: "Cancel", style: .cancel) { (action) -> Void in
            print("Cancel button click...")
        }

        //Add OK and Cancel button to dialog message
        dialogMessage.addAction(ok)
        dialogMessage.addAction(cancel)

        // Present dialog message to user
        self.present(dialogMessage, animated: true, completion: nil)
    }

// définition de la fonction logoutFun ():

func logoutFun()
{
    print("Logout Successfully...!")
}
Kiran jadhav
la source
3

Vous pouvez facilement le faire en utilisant UIAlertController

let alertController = UIAlertController(
       title: "Your title", message: "Your message", preferredStyle: .alert)
let defaultAction = UIAlertAction(
       title: "Close Alert", style: .default, handler: nil)
//you can add custom actions as well 
alertController.addAction(defaultAction)

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

.

Référence: iOS Show Alert

Shaba Aafreen
la source
0

Vous pouvez envisager d'utiliser SCLAlertView , alternative à UIAlertView ou UIAlertController .

UIAlertController ne fonctionne que sur iOS 8.x ou supérieur, SCLAlertView est une bonne option pour prendre en charge une version plus ancienne.

github pour voir les détails

exemple:

let alertView = SCLAlertView()
alertView.addButton("First Button", target:self, selector:Selector("firstButton"))
alertView.addButton("Second Button") {
    print("Second button tapped")
}
alertView.showSuccess("Button View", subTitle: "This alert view has buttons")
Bientôt Khai
la source