ActionSheet not working iPad ActionSheet not working iPad ios ios

ActionSheet not working iPad


You need to provide a source view or button just before presenting optionMenu since on iPad its a UIPopoverPresentationController, As it says in your error. This just means that your action sheet points to the button letting the user know where it started from.

For example if you're presenting your optionMenu by tapping on the right navigation bar item. You could do something like this:

optionMenu.popoverPresentationController?.barButtonItem = self.navigationItem.rightBarButtonItemself.presentViewController(optionMenu, animated: true, completion: nil)

or you could set a view like this:(You just need one of these 2)

optionMenu.popoverPresentationController?.sourceView = yourViewself.presentViewController(optionMenu, animated: true, completion: nil)

Also keep in mind that if you change your UIAlertControllerStyle to Alert instead of action sheet, You wouldn't need to specify this. I am sure you must have figured it out but i just wanted to help anyone who comes across this page.


Same problem for me. I had a UIAlertController that worked fine on phone, but crashed on iPad. The sheet pops up when a cell is tapped from a table view.

For Swift 3, I added 3 lines of code right before presenting it:

        ...        sheet.popoverPresentationController?.sourceView = self.view        sheet.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection()        sheet.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)        self.present(sheet, animated: true, completion: nil)


Swift 3

As said before, you should configure UIAlertController to be presented on a specific point on iPAD.

Example for navigation bar:

    // 1    let optionMenu = UIAlertController(title: nil, message: "Choose an option", preferredStyle: .actionSheet)    // 2    let deleteAction = UIAlertAction(title: "Option 1", style: .default, handler: {        (alert: UIAlertAction!) -> Void in        print("option 1 pressed")    })    let saveAction = UIAlertAction(title: "Option 2", style: .default, handler: {        (alert: UIAlertAction!) -> Void in        print("option 2 pressed")    })    //    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: {        (alert: UIAlertAction!) -> Void in        print("Cancelled")    })    // 4    optionMenu.addAction(deleteAction)    optionMenu.addAction(saveAction)    optionMenu.addAction(cancelAction)    // 5    optionMenu.popoverPresentationController?.barButtonItem = self.navigationItem.rightBarButtonItem    self.present(optionMenu, animated: true) {         print("option menu presented")    }