No Swift 2, você deseja fazer algo assim para mostrá-lo corretamente no iPhone e 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)
}
Se você não definir o apresentador, você verá uma exceção no iPad -[UIPopoverPresentationController presentationTransitionWillBegin]
com a seguinte mensagem:
Exceção fatal: NSGenericException Seu aplicativo apresentou um UIAlertController (<UIAlertController: 0x17858a00>) do estilo UIAlertControllerStyleActionSheet. O modalPresentationStyle de um UIAlertController com esse estilo é UIModalPresentationPopover. Você deve fornecer informações de localização para esse popover por meio do popoverPresentationController do controlador de alerta. Você deve fornecer um sourceView e sourceRect ou um barButtonItem. Se essas informações não forem conhecidas quando você apresentar o controlador de alerta, poderá fornecê-las no método UIPopoverPresentationControllerDelegate -prepareForPopoverPresentation.