У Swift 2 потрібно зробити щось подібне, щоб правильно відобразити це на iPhone та 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)
}
Якщо ви не встановите презентатора, ви отримаєте виняток на iPad у -[UIPopoverPresentationController presentationTransitionWillBegin]
повідомленні:
Фатальний виняток: NSGenericException У вашій програмі представлено UIAlertController (<UIAlertController: 0x17858a00>) стилю UIAlertControllerStyleActionSheet. ModalPresentationStyle UIAlertController з цим стилем є UIModalPresentationPopover. Ви повинні надати інформацію про місцеположення для цього перемикача через контролер popoverPresentationController контролера. Ви повинні надати або sourceView та sourceRect, або barButtonItem. Якщо ця інформація не відома під час подання контролера оповіщення, ви можете надати її методом UIPopoverPresentationControllerDelegate -prepareForPopoverPresentation.