Search code examples
iosswiftdialoguialertviewuialertcontroller

Where to find a clear explanation about swift alert (UIAlertController)?


Couldn't find a clear and informative explanation for this.


Solution

  • After searching a while on a subject I didn't find a clear explanation , even in it's class reference UIAlertController Reference

    It is ok, but not clear enough for me.

    So after collecting some peaces I decided to make my own explanation (Hope it helps)

    So here it goes:

    1. UIAlertView is deprecated as pointed out : UIAlertView in Swift
    2. UIAlertController should be used in iOS8+ so to create one first we need to instantiate it, the Constructor(init) gets 3 parameters:

    2.1 title:String -> big-bold text to display on the top of alert's dialog box

    2.2 message:String -> smaller text (pretty much explains it's self)

    2.3 prefferedStyle:UIAlertControllerStyle -> define the dialog box style, in most cases: UIAlertControllerStyle.Alert

    1. Now to actually show it to the user, we can use showViewController or presentViewController and pass our alert as parameter

    2. To add some interaction with a user we can use:

    4.1 UIAlertController.addAction to create buttons

    4.2 UIAlertController.addTextField to create text fields

    Edit note: code examples below, updated for swift 3 syntax

    Example 1: Simple Dialog

    @IBAction func alert1(sender: UIButton) {
         //simple alert dialog
        let alert=UIAlertController(title: "Alert 1", message: "One has won", preferredStyle: UIAlertControllerStyle.alert);
        //show it
        show(alert, sender: self);
    }
    

    Example 2: Dialog with one input textField & two buttons

    @IBAction func alert2(sender: UIButton) {
        //Dialog with one input textField & two buttons
        let alert=UIAlertController(title: "Alert 2", message: "Two will win too", preferredStyle: UIAlertControllerStyle.alert);
        //default input textField (no configuration...)
        alert.addTextField(configurationHandler: nil);
        //no event handler (just close dialog box)
        alert.addAction(UIAlertAction(title: "No", style: UIAlertActionStyle.cancel, handler: nil));
        //event handler with closure
        alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.default, handler: {(action:UIAlertAction) in
            let fields = alert.textFields!;
            print("Yes we can: "+fields[0].text!);
        }));
        present(alert, animated: true, completion: nil);
    }
    

    Example 3: One customized input textField & one button

    @IBAction func alert3(sender: UIButton) {
       // one input & one button
       let alert=UIAlertController(title: "Alert 3", message: "Three will set me free", preferredStyle: UIAlertControllerStyle.alert);
    
        //configured input textField
        var field:UITextField?;// operator ? because it's been initialized later
        alert.addTextField(configurationHandler:{(input:UITextField)in
            input.placeholder="I am displayed, when there is no value ;-)";
            input.clearButtonMode=UITextFieldViewMode.whileEditing;
            field=input;//assign to outside variable(for later reference)
        });
        //alert3 yesHandler -> defined in the same scope with alert, and passed as event handler later
        func yesHandler(actionTarget: UIAlertAction){
            print("YES -> !!");
            //print text from 'field' which refer to relevant input now
            print(field!.text!);//operator ! because it's Optional here
        }
        //event handler with predefined function
        alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.default, handler: yesHandler));
    
        present(alert, animated: true, completion: nil);
     }
    

    Hope It helps, and good luck ;-)