Cancel Button in UIAlertController with UIAlertControllerStyle.ActionSheet

user4001326 picture user4001326 · Nov 16, 2014 · Viewed 31.8k times · Source

I want to add a separated cancel button to my UIAlert.

I know how to do it with UIActionSheet but it should also be possible with UIAlert, right?

var sheet: UIActionSheet = UIActionSheet();
    let title: String = "...";
    sheet.title  = title;
    sheet.delegate = self;
    sheet.addButtonWithTitle("Cancel");
    sheet.addButtonWithTitle("...")
    sheet.cancelButtonIndex = 0;
    sheet.showInView(self.view);

This will have a ... button and a cancel button which is separated.

So does anyone know how to do this with

    var alert = UIAlertController(title: "...", message: "....", preferredStyle: UIAlertControllerStyle.ActionSheet)

?

I'm new to xcode and swift so sorry if this question is dumb or anything...

Answer

Jack Chorley picture Jack Chorley · Nov 16, 2014

Its really simple, but works a bit differently to how they used to work. Now you add "actions" to your alerts. These actions are then represented by buttons on the device.

alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

Above is the code needed for a simple cancel button - bear in mind that dismissal of the alert is done automatically so don't put that in your handler. Should you then want to create another button which does something, use the code below:

alert.addAction(UIAlertAction(title: "Button", style: UIAlertActionStyle.Default, handler: { action in
        println("This button now calls anything inside here!")
    }))

Hopefully I have understood your question and this answers what you were asking. I will also add that after you have added all of the "actions", you present the alert using the code below:

self.presentViewController(alert, animated: true, completion: nil)

Hope this helps!