En Swift 2, desea hacer algo como esto para mostrarlo correctamente en iPhone y iPad:
func confirmAndDelete(sender: AnyObject) {
guard let button = sender as? UIView else {
return
}
let alert = UIAlertController(title: NSLocalizedString("Delete Contact?", comment: ""), message: NSLocalizedString("This action will delete all downloaded audio files.", comment: ""), preferredStyle: .ActionSheet)
alert.modalPresentationStyle = .Popover
let action = UIAlertAction(title: NSLocalizedString("Delete", comment: ""), style: .Destructive) { action in
EarPlaySDK.deleteAllResources()
}
let cancel = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .Cancel) { action in
}
alert.addAction(cancel)
alert.addAction(action)
if let presenter = alert.popoverPresentationController {
presenter.sourceView = button
presenter.sourceRect = button.bounds
}
presentViewController(alert, animated: true, completion: nil)
}
Si no configura el presentador, terminará con una excepción en el iPad -[UIPopoverPresentationController presentationTransitionWillBegin]
con el siguiente mensaje:
Excepción grave: NSGenericException Su aplicación ha presentado un UIAlertController (<UIAlertController: 0x17858a00>) de estilo UIAlertControllerStyleActionSheet. El modalPresentationStyle de un UIAlertController con este estilo es UIModalPresentationPopover. Debe proporcionar información de ubicación para este popover a través del popoverPresentationController del controlador de alertas. Debe proporcionar sourceView y sourceRect o barButtonItem. Si no conoce esta información cuando presente el controlador de alertas, puede proporcionarlo en el método UIPopoverPresentationControllerDelegate -prepareForPopoverPresentation.