iosswiftuiactionsheet

How to present iOS UIActionSheet in Swift?


How can I present a UIActionSheet in Swift within an iOS app?

Here is my code for displaying a UIActionSheet:

@IBAction func downloadSheet(sender: AnyObject) {
    let optionMenu = UIAlertController(title: nil, message: "Choose Option", preferredStyle: .actionSheet) 

    let saveAction = UIAlertAction(title: "Save", style: .default, handler: {
        (alert: UIAlertAction!) -> Void in
        println("Saved")
    })
    
    let deleteAction = UIAlertAction(title: "Delete", style: .default, handler: {
        (alert: UIAlertAction!) -> Void in
        println("Deleted")
    })
    
    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: {
        (alert: UIAlertAction!) -> Void in
        println("Cancelled")
    })
    optionMenu.addAction(deleteAction)
    optionMenu.addAction(saveAction)
    optionMenu.addAction(cancelAction)
    self.presentViewController(optionMenu, animated: true, completion: nil)
}

Solution

  • Your Approach is fine, but you can add UIActionSheet with other way with ease.

    You can add UIActionSheetDelegate in UIViewController` like

    class ViewController: UIViewController ,UIActionSheetDelegate
    

    Set you method like,

    @IBAction func downloadSheet(sender: AnyObject)
    {
    
        let actionSheet = UIActionSheet(title: "Choose Option", delegate: self, cancelButtonTitle: "Cancel", destructiveButtonTitle: nil, otherButtonTitles: "Save", "Delete")
    
        actionSheet.showInView(self.view)
    }
    

    You can get your button index when it clicked like

    func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int)
    {
        println("\(buttonIndex)")
        switch (buttonIndex){
    
        case 0:
            println("Cancel")
        case 1:
            println("Save")
        case 2:
            println("Delete")
        default:
            println("Default")
            //Some code here..
    
        }
    }
    

    Update 1: for iOS8+

        //Create the AlertController and add Its action like button in Actionsheet
        let actionSheetControllerIOS8: UIAlertController = UIAlertController(title: "Please select", message: "Option to select", preferredStyle: .ActionSheet)
    
        let cancelActionButton = UIAlertAction(title: "Cancel", style: .cancel) { _ in
            print("Cancel")
        }
        actionSheetControllerIOS8.addAction(cancelActionButton)
    
        let saveActionButton = UIAlertAction(title: "Save", style: .default)
            { _ in
               print("Save")
        }
        actionSheetControllerIOS8.addAction(saveActionButton)
    
        let deleteActionButton = UIAlertAction(title: "Delete", style: .default)
            { _ in
                print("Delete")
        }
        actionSheetControllerIOS8.addAction(deleteActionButton)
        self.present(actionSheetControllerIOS8, animated: true, completion: nil)