Trong Swift 2, bạn muốn làm một cái gì đó như thế này để hiển thị đúng trên iPhone và 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)
}
Nếu bạn không đặt người thuyết trình, bạn sẽ có một ngoại lệ trên iPad -[UIPopoverPresentationController presentationTransitionWillBegin]
với thông báo sau:
Ngoại lệ gây tử vong: NSGenericException Ứng dụng của bạn đã trình bày một UIAlertControll (<UIAlertControll: 0x17858a00>) của kiểu UIAlertControllStyleActionSheet. ModalPftimeationStyle của một UIAlertControll với kiểu này là UIModalPftimeationPopover. Bạn phải cung cấp thông tin vị trí cho cửa sổ bật lên này thông qua popoverPftimeationContoder của bộ điều khiển cảnh báo. Bạn phải cung cấp sourceView và sourceRect hoặc barButtonItem. Nếu thông tin này không được biết khi bạn trình bày bộ điều khiển cảnh báo, bạn có thể cung cấp thông tin đó trong phương thức UIPopoverPftimeationControllDelegate -prepareForPopoverPftimeation.