Comment créer une vue UIAlertView dans Swift?

j'ai travaillé pour créer une vue UIAlertView dans Swift, mais pour une raison quelconque, Je ne peux pas obtenir la bonne déclaration parce que je reçois cette erreur:

N'a pas pu trouver une surcharge pour "init" qui accepte les arguments

, Voici comment je l'ai écrit:

let button2Alert: UIAlertView = UIAlertView(title: "Title", message: "message",
                     delegate: self, cancelButtonTitle: "OK", otherButtonTitles: nil)

alors pour l'appeler j'utilise:

button2Alert.show()

en ce moment, il est en train de s'écraser et j'ai juste pouvez pas sembler obtenir la syntaxe de droit.

381
demandé sur Dmitry 2014-06-03 22:35:19

30 réponses

de la classe UIAlertView :

// UIAlertView est obsolète. Utiliser UIAlertController avec un preferredStyle of UIAlertControllerStyleAlert instead

sur iOS 8, Vous pouvez le faire:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)

maintenant UIAlertController est une classe unique pour créer et interagir avec ce que nous savions comme UIAlertView s et UIActionSheet s sur iOS 8.

Edit: Pour gérer les actions:

alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { action in
    switch action.style{
    case .Default:
        print("default")

    case .Cancel:
        print("cancel")

    case .Destructive:
        print("destructive")
    }
}}))

Modifier pour Swift 3:

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

Modifier pour Swift 4:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
      switch action.style{
      case .default:
            print("default")

      case .cancel:
            print("cancel")

      case .destructive:
            print("destructive")


}}))
self.present(alert, animated: true, completion: nil)
782
répondu Oscar Swanros 2018-04-13 00:34:36

Un Bouton

One Button Screenshot

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // create the alert
        let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertController.Style.alert)

        // add an action (button)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))

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

Deux Boutons

Two Button Alert Screenshot

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: UIAlertController.Style.alert)

        // add the actions (buttons)
        alert.addAction(UIAlertAction(title: "Continue", style: UIAlertAction.Style.default, handler: nil))
        alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel, handler: nil))

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

Trois Boutons

enter image description here

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: UIAlertController.Style.alert)

        // add the actions (buttons)
        alert.addAction(UIAlertAction(title: "Remind Me Tomorrow", style: UIAlertAction.Style.default, handler: nil))
        alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActio.nStyle.cancel, handler: nil))
        alert.addAction(UIAlertAction(title: "Launch the Missile", style: UIAlertAction.Style.destructive, handler: nil))

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

La Manipulation Du Bouton De Robinets

le handler était nil dans les exemples ci-dessus. Vous pouvez remplacer nil par fermeture pour faire quelque chose quand l'utilisateur tape un bouton. Par exemple:

alert.addAction(UIAlertAction(title: "Launch the Missile", style: UIAlertAction.Style.destructive, handler: { action in

    // do something like...
    self.launchMissile()

}))

Notes

  • Plusieurs boutons n'ont pas nécessairement besoin d'utiliser différents UIAlertAction.Style . 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.
365
répondu Suragch 2018-10-05 14:18:24

vous pouvez créer un UIAlert en utilisant le constructeur standard, mais le "legacy" semble ne pas fonctionner:

let alert = UIAlertView()
alert.title = "Alert"
alert.message = "Here's a message"
alert.addButtonWithTitle("Understood")
alert.show()
111
répondu Ben Gottlieb 2017-03-29 13:47:38

Click de vue

@IBAction func testClick(sender: UIButton) {

  var uiAlert = UIAlertController(title: "Title", message: "Message", preferredStyle: UIAlertControllerStyle.Alert)
  self.presentViewController(uiAlert, animated: true, completion: nil)

  uiAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { action in
   println("Click of default button")
  }))

  uiAlert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: { action in
   println("Click of cancel button")
  }))

}

fait avec deux boutons OK & Cancel

17
répondu Hiren Patel 2015-05-10 16:21:34

si vous ciblez iOS 7 et 8, Vous avez besoin de quelque chose comme ça pour vous assurer que vous utilisez la bonne méthode pour chaque version, parce que UIAlertView est déprécié dans iOS 8, mais UIAlertController n'est pas disponible dans iOS 7:

func alert(title: String, message: String) {
    if let getModernAlert: AnyClass = NSClassFromString("UIAlertController") { // iOS 8
        let myAlert: UIAlertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
        myAlert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
        self.presentViewController(myAlert, animated: true, completion: nil)
    } else { // iOS 7
        let alert: UIAlertView = UIAlertView()
        alert.delegate = self

        alert.title = title
        alert.message = message
        alert.addButtonWithTitle("OK")

        alert.show()
    }
}
12
répondu AstroCB 2015-01-13 21:14:01

afficher UIAlertView en langage swift: -

Protocole UIAlertViewDelegate

let alert = UIAlertView(title: "alertView", message: "This is alertView", delegate:self, cancelButtonTitle:"Cancel", otherButtonTitles: "Done", "Delete")
alert.show()

Afficher UIAlertViewController dans swift langue :-

let alert = UIAlertController(title: "Error", message: "Enter data in Text fields", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
11
répondu Anit Kumar 2014-10-08 13:41:16

ne fournissent tout simplement pas d'autresbuttontitres dans le constructeur.

let alertView = UIAlertView(title: "Oops!", message: "Something
happened...", delegate: nil, cancelButtonTitle: "OK")

alertView.show()

mais je suis D'accord avec Oscar, cette classe est dépréciée dans iOS 8, donc il n'y aura pas d'utilisation de UIAlertView si vous faites une application iOS 8 seulement. Sinon, le code ci-dessus fonctionnera.

11
répondu Peymankh 2014-12-22 14:51:07

avec les extensions de protocole de Swift 2, Vous pouvez faire un protocole qui fournit une implémentation par défaut à vos contrôleurs de vue:

ShowsAlert.swift

import UIKit

protocol ShowsAlert {}

extension ShowsAlert where Self: UIViewController {
    func showAlert(title: String = "Error", message: String) {
        let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
        alertController.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))
        presentViewController(alertController, animated: true, completion: nil)
    }
}

ViewController.swift

class ViewController: UIViewController, ShowsAlert {
    override func viewDidLoad() {
        super.viewDidLoad()
        showAlert(message: "Hey there, I am an error message!")
    }
}
10
répondu knshn 2016-01-04 13:32:49

j'ai trouvé celui-ci,

var alertView = UIAlertView();
alertView.addButtonWithTitle("Ok");
alertView.title = "title";
alertView.message = "message";
alertView.show();

pas bon si, mais il fonctionne :)

mise à jour:

, mais j'ai trouvé sur le fichier d'en-tête:

extension UIAlertView {
    convenience init(title: String, message: String, delegate: UIAlertViewDelegate?, cancelButtonTitle: String?, otherButtonTitles firstButtonTitle: String, _ moreButtonTitles: String...)
}

quelqu'un peut expliquer cela.

9
répondu Mujah Maskey 2014-06-03 19:05:20

Pour SWIFT4 , je pense que, en l'étendant UIViewController et la création d'une réutilisables confirmation de contrôle est la façon la plus élégante.

vous pouvez prolonger le UIViewController comme ci-dessous:

extension UIViewController {

func AskConfirmation (title:String, message:String, completion:@escaping (_ result:Bool) -> Void) {
    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
    self.present(alert, animated: true, completion: nil)

    alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { action in
        completion(true)
    }))

    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { action in
        completion(false)
    }))
  }
}

alors vous pouvez l'utiliser à tout moment:

 AskConfirmation(title: "YOUR MESSAGE TITLE", message: "YOUR MESSAGE") { (result) in
        if result { //User has clicked on Ok

        } else { //User has clicked on Cancel

        }
    }
6
répondu emreoktem 2018-03-04 01:23:02
    class Preview: UIViewController , UIAlertViewDelegate
    {
        @IBAction func MoreBtnClicked(sender: AnyObject)
        {
            var moreAlert=UIAlertView(title: "Photo", message: "", delegate: self, cancelButtonTitle: "No Thanks!", otherButtonTitles: "Save Image", "Email", "Facebook", "Whatsapp" )
            moreAlert.show()
            moreAlert.tag=111;
        }

        func alertView(alertView: UIAlertView, didDismissWithButtonIndex buttonIndex: Int)
        {
            if alertView.tag==111
            {
                if buttonIndex==0
                {
                    println("No Thanks!")
                }
                else if buttonIndex==1
                {
                    println("Save Image")
                }
                else if buttonIndex == 2
                {
                    println("Email")
                }
                else if buttonIndex == 3
                {
                    println("Facebook")
                }
                else if buttonIndex == 4
                {
                    println("Whatsapp")
                }
            }
        }
    }
5
répondu Jayesh Miruliya 2015-07-10 12:35:47

j'ai un autre truc. Supposons que vous ayez 5 classes où une alerte de déconnexion doit être appliquée. Essayez l'extension de la classe swift.

Fichier - Nouveau - Swift de Nom de classe.

ajouter le texte suivant:

public extension UIViewController
{

    func makeLogOutAlert()
    {
        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)
    }
}

implémenter en utilisant : self.makeLogOutAlert (). Espérons que cela aide.

5
répondu A.G 2015-10-08 14:50:55

j'ai fait une classe singleton pour rendre cette pratique à utiliser de n'importe où dans votre application: https://github.com/Swinny1989/Swift-Popups

vous pouvez alors créer un popup avec plusieurs boutons comme celui-ci:

Popups.SharedInstance.ShowAlert(self, title: "Title goes here", message: "Messages goes here", buttons: ["button one" , "button two"]) { (buttonPressed) -> Void in
    if buttonPressed == "button one" { 
      //Code here
    } else if buttonPressed == "button two" {
        // Code here
    }
}

ou popups avec un seul bouton comme celui-ci:

Popups.SharedInstance.ShowPopup("Title goes here", message: "Message goes here.")
5
répondu Swinny89 2015-10-26 09:31:58

Swift 3

ce qui suit est un exemple simple de la façon de créer une alerte simple avec un bouton avec Swift 3.

let alert = UIAlertController(title: "Title",
                              message: "Message",
                              preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default))
present(alert, animated: true)

dans l'exemple ci-dessus, le rappel de la poignée de l'action a été omis parce que le comportement par défaut d'une vue d'alerte avec un bouton est de disparaître lorsque le bouton est cliqué.

Voici comment créer une autre action, qui pourrait être ajoutée à l'alerte avec "alerte.addAction (action)". Les différents styles le sont .défaut. ,et destructrices .annuler.

let action = UIAlertAction(title: "Ok", style: .default) { action in
    // Handle when button is clicked    
}
5
répondu 2016-10-05 07:25:26

dans Swift 4.1 et Xcode 9.4.1

SIMPLE ALERT

let alert = UIAlertController(title: ""Your title, message: "Your message", preferredStyle: .alert)

     let ok = UIAlertAction(title: "OK", style: .default, handler: { action in
     })
     alert.addAction(ok)
     let cancel = UIAlertAction(title: "Cancel", style: .default, handler: { action in
     })
     alert.addAction(cancel)
     DispatchQueue.main.async(execute: {
        self.present(alert, animated: true)
})

ALERTE AVEC CLASSE PARTAGÉE

si vous voulez partager le style de classe (écrire une fois utiliser chaque où)

import UIKit
class SharedClass: NSObject {//This is shared class
static let sharedInstance = SharedClass()

    //Show alert
    func alert(view: UIViewController, title: String, message: String) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { action in
        })
        alert.addAction(defaultAction)
        DispatchQueue.main.async(execute: {
            view.present(alert, animated: true)
        })
    }

    private override init() {
    }
}

maintenant, appelez alert comme ceci dans chaque pièce

SharedClass.SharedInstance.alert(view: self, title: "Your title here", message: "Your message here")

PRÉSENT ALERTE TOUTES LES FENÊTRES

si vous voulez présenter l'alerte sur le dessus de toutes les vues, utilisez ce code

func alertWindow(title: String, message: String) {
    DispatchQueue.main.async(execute: {
        let alertWindow = UIWindow(frame: UIScreen.main.bounds)
        alertWindow.rootViewController = UIViewController()
        alertWindow.windowLevel = UIWindowLevelAlert + 1

        let alert2 = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let defaultAction2 = UIAlertAction(title: "OK", style: .default, handler: { action in
        })
        alert2.addAction(defaultAction2)

        alertWindow.makeKeyAndVisible()

        alertWindow.rootViewController?.present(alert2, animated: true, completion: nil)
    })
}

appel de fonction

SharedClass.sharedInstance.alertWindow(title:"This your title", message:"This is your message")

ALERT WITH TEXTFIELDS

si vous voulez ajouter des champs de texte à alert.

//Global variables
var name:String?
var login:String?

//Call this function like this:  alertWithTF() 
//Add textfields to alert 
func alertWithTF() {

    let alert = UIAlertController(title: "Login", message: "Enter username&password", preferredStyle: .alert)
    // Login button
    let loginAction = UIAlertAction(title: "Login", style: .default, handler: { (action) -> Void in
        // Get TextFields text
        let usernameTxt = alert.textFields![0]
        let passwordTxt = alert.textFields![1]
        //Asign textfileds text to our global varibles
        self.name = usernameTxt.text
        self.login = passwordTxt.text

        print("USERNAME: \(self.name!)\nPASSWORD: \(self.login!)")
    })

    // Cancel button
    let cancel = UIAlertAction(title: "Cancel", style: .destructive, handler: { (action) -> Void in })

    //1 textField for username
    alert.addTextField { (textField: UITextField) in
        textField.placeholder = "Enter username"
        //If required mention keyboard type, delegates, text sixe and font etc...
        //EX:
        textField.keyboardType = .default
    }

    //2nd textField for password
    alert.addTextField { (textField: UITextField) in
        textField.placeholder = "Enter password"
        textField.isSecureTextEntry = true
    }

    // Add actions
    alert.addAction(loginAction)
    alert.addAction(cancel)
    self.present(alert, animated: true, completion: nil)

}
5
répondu iOS 2018-09-12 06:18:29

j'ai obtenu le code d'initialisation suivant UIAlertView pour compiler sans erreurs (je pense que la dernière partie, varyadic est délicate peut-être). Mais je devais m'assurer que la classe de self (que je passe en tant que délégué) adoptait le protocole UIAlertViewDelegate pour que les erreurs de compilation disparaissent:

let alertView = UIAlertView(
                  title: "My Title",
                  message: "My Message",
                  delegate: self,
                  cancelButtonTitle: "Cancel",
                  otherButtonTitles: "OK"
                )

soit dit en passant, c'est l'erreur que j'ai eue (au Xcode 6.4):

ne peut pas trouver d'initialiseur pour le type "UIAlertView" qui accepte une liste des arguments du type " (titre: String, message: String, délégué: MyViewController, cancelButtonTitle: String, otherButtonTitles: String) '

comme d'autres l'ont mentionné, vous devez migrer vers UIAlertController si vous pouvez cibler iOS 8.x+. Pour prendre en charge iOS 7, utilisez le code ci-dessus (iOS 6 n'est pas pris en charge par Swift).

4
répondu Nicolas Miari 2015-07-14 07:44:33

la raison pour laquelle il ne fonctionne pas parce qu'une valeur que vous avez passé à la fonction n'est pas correcte. swift n'aime pas Objective-C, vous pouvez mettre nil aux arguments qui sont des types de classe sans aucune restriction(pourrait être). Argument otherButtonTitles est défini comme non-optionnel que son type n'a pas (?)à sa fin. si vous devez passer une valeur concrète.

3
répondu Oscar Wu 2014-06-29 16:33:23
@IBAction func Alert(sender: UIButton) {

    var alertView:UIAlertView = UIAlertView()
    alertView.title = "Alert!"
    alertView.message = "Message"
    alertView.delegate = self
    alertView.addButtonWithTitle("OK")

    alertView.show()

}

Essayez cette

3
répondu gskril 2014-10-13 22:55:22

utilisez ce code pour afficher une vue d'alert

  let alertController = UIAlertController(title: "Hello  Coders", message: "your alert message", preferredStyle: .Alert)
        let defaultAction = UIAlertAction(title: "Close Alert", style: .Default, handler: nil)
        alertController.addAction(defaultAction)

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

référence: Swift Show Alert using UIAlertController

3
répondu Shaba Aafreen 2016-10-10 02:47:51

dans xcode 9

let alert = UIAlertController(title: "Alert", message: "message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
3
répondu luhuiya 2017-10-05 06:34:27
 let alertController = UIAlertController(title: "Select Photo", message: "Select atleast one photo", preferredStyle: .alert)
    let action1 = UIAlertAction(title: "From Photo", style: .default) { (action) in
        print("Default is pressed.....")
    }
    let action2 = UIAlertAction(title: "Cancel", style: .cancel) { (action) in
        print("Cancel is pressed......")
    }
    let action3 = UIAlertAction(title: "Click new", style: .default) { (action) in
        print("Destructive is pressed....")

    }
    alertController.addAction(action1)
    alertController.addAction(action2)
    alertController.addAction(action3)
    self.present(alertController, animated: true, completion: nil)

}
3
répondu Mr.Javed Multani 2018-03-08 09:28:21

SWIFT 4: Il suffit de créer une extension à UIViewController comme suit:

   extension  UIViewController{

   func showSucsessAlert(withTitle title: String, andMessage 
    message:String){
        let alert = UIAlertController(title: title, message: message, 
         preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "OK", style: 
        UIAlertActionStyle.default, handler: nil))
        self.present(alert, animated: true, completion: nil)
         }
    }

maintenant dans votre viewcontroller, appelez directement la fonction ci-dessus comme si elles étaient fournies par UIViewController.

    yourViewController.showSucsessAlert(withTitle: 
      "YourTitle", andMessage: "YourCustomTitle")
2
répondu Shikha Budhiraja 2018-06-03 14:10:05

essayez ceci. Mettre Soufflet Code Dans Le Bouton.

let alert = UIAlertController(title: "Your_Title_Text", message: "Your_MSG", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Your_Text", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated:true, completion: nil)
2
répondu Sagar Sangani 2018-08-02 13:28:45

voici un exemple amusant dans Swift:

private func presentRandomJoke() {
  if let randomJoke: String = jokesController.randomJoke() {
    let alertController: UIAlertController = UIAlertController(title:nil, message:randomJoke, preferredStyle: UIAlertControllerStyle.Alert)
    alertController.addAction(UIAlertAction(title:"Done", style:UIAlertActionStyle.Default, handler:nil))
    presentViewController(alertController, animated:true, completion:nil)
  }
}
1
répondu Zorayr 2015-04-25 06:51:27

Voici une fonction assez simple D'AlertView dans Swift :

class func globalAlertYesNo(msg: String) {
        let alertView = UNAlertView(title: "Title", message: msg)

        alertView.messageAlignment = NSTextAlignment.Center
        alertView.buttonAlignment  = UNButtonAlignment.Horizontal

        alertView.addButton("Yes", action: {

            print("Yes action")

        })

        alertView.addButton("No", action: {

            print("No action")

        })

        alertView.show()

    }

vous devez passer le message comme une chaîne de caractères où vous utilisez cette fonction.

1
répondu iAnkit 2016-06-15 09:04:29

À L'Ancienne: UIAlertView

let alertView = UIAlertView(title: "Default Style", message: "A standard alert.", delegate: self, cancelButtonTitle: "Cancel", otherButtonTitles: "OK")
alertView.alertViewStyle = .Default
alertView.show()

// MARK: UIAlertViewDelegate

 func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
 switch buttonIndex {

    // ...
   }
  }

La Nouvelle Voie: UIAlertController

let alertController = UIAlertController(title: "Default Style", message: "A standard alert.", preferredStyle: .Alert)

let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in
// ...
 }
 alertController.addAction(cancelAction)

 let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in
// ...
 }
 alertController.addAction(OKAction)
 self.presentViewController(alertController, animated: true) {
 // ...
}
1
répondu Shanmugasundharam selvadurai 2016-07-04 08:43:26

sur IOS 9, Vous pouvez faire ce

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
1
répondu Keshav Gera 2017-12-28 10:46:07

/ / Classe Générique Pour UIAlertView

//MARK:- MODULES
import Foundation
import UIKit

//MARK:- CLASS
class Alert  : NSObject{

static let shared = Alert()

var okAction : AlertSuccess?
typealias AlertSuccess = (()->())?
var alert: UIAlertController?

/** show */
public func show(title : String?, message : String?, viewController : UIViewController?, okAction : AlertSuccess = nil) {

    let version : NSString = UIDevice.current.systemVersion as NSString
    if  version.doubleValue >= 8 {
        alert = UIAlertController(title: title, message: message, preferredStyle:.alert)
        alert?.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action: UIAlertAction) in

            if let okAction = okAction {
                okAction()
            }
        }))
        viewController?.present(alert ?? UIAlertController(), animated:true, completion:nil);
    }
}

/** showWithCancelAndOk */
public func showWithCancelAndOk(title : String, okTitle : String, cancelTitle : String, message : String, viewController : UIViewController?, okAction : AlertSuccess = nil, cancelAction : AlertSuccess = nil) {
    let version:NSString = UIDevice.current.systemVersion as NSString;

    if  version.doubleValue >= 8 {
        alert = UIAlertController(title: title, message: message, preferredStyle:.alert)

        alert?.addAction(UIAlertAction(title: cancelTitle, style: .default, handler: { (action: UIAlertAction) in

            if let cancelAction = cancelAction {
                cancelAction()
            }
        }))
        alert?.addAction(UIAlertAction(title: okTitle, style: .default, handler: { (action: UIAlertAction) in

            if let okAction = okAction {
                okAction()
            }
        }))
        viewController?.present(alert!, animated:true, completion:nil);
    }
}

/** showWithTimer */
public func showWithTimer(message : String?, viewController : UIViewController?) {

    let version : NSString = UIDevice.current.systemVersion as NSString
    if  version.doubleValue >= 8 {
        alert = UIAlertController(title: "", message: message, preferredStyle:.alert)
        viewController?.present(alert ?? UIAlertController(), animated:true, completion:nil)
        let when = DispatchTime.now() + 1
        DispatchQueue.main.asyncAfter(deadline: when){
            self.alert?.dismiss(animated: true, completion: nil)
        }
    }
}
}

utilisation: -

Alert.shared.show(title: "No Internet Connection", message: "The internet connection appers to be offline.", viewController: self) //without ok action

Alert.shared.show(title: "No Internet Connection", message: "The internet connection appers to be offline.", viewController: self, okAction: {
                            //ok action
                        }) // with ok action

Alert.shared.show(title: "No Internet Connection", message: "The internet connection appers to be offline.", viewController: self, okAction: {
                            //ok action 
}, cancelAction: {
 //cancel action
}) //with cancel and ok action

Alert.shared.showWithTimer(message : "This is an alert with timer", viewController : self) //with timer
1
répondu Pratyush Pratik 2018-02-28 13:24:52
  // UIAlertView is deprecated. Use UIAlertController 
  // title = title of the alert view.
  // message = Alert message you want to show.
  // By tap on "OK" , Alert view will dismiss.

 UIAlertView(title: "Alert", message: "Enter Message here.", delegate: nil, cancelButtonTitle: "OK").show()
1
répondu Hitesh Chauhan 2018-05-04 08:35:47

ci-dessous est le code réutilisable pour la vue d'alerte et la feuille d'action, il suffit d'écrire une ligne pour montrer alert n'importe où dans l'application

class AlertView{

    static func show(title:String? = nil,message:String?,preferredStyle: UIAlertControllerStyle = .alert,buttons:[String] = ["Ok"],completionHandler:@escaping (String)->Void){
        let alert = UIAlertController(title: title, message: message, preferredStyle: preferredStyle)

        for button in buttons{

            var style = UIAlertActionStyle.default
            let buttonText = button.lowercased().replacingOccurrences(of: " ", with: "")
            if buttonText == "cancel"{
                style = .cancel
            }
            let action = UIAlertAction(title: button, style: style) { (_) in
                completionHandler(button)
            }
            alert.addAction(action)
        }

        DispatchQueue.main.async {
            if let app = UIApplication.shared.delegate as? AppDelegate, let rootViewController = app.window?.rootViewController {
                rootViewController.present(alert, animated: true, completion: nil)
            }

        }
    }
}

Utilisation :

class ViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        AlertView.show(title: "Alert", message: "Are you sure ?", preferredStyle: .alert, buttons: ["Yes","No"]) { (button) in
            print(button)
        }
    }

}
1
répondu indrajit 2018-08-15 11:01:09