ใน 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 คุณต้องให้ข้อมูลตำแหน่งสำหรับ popover นี้ผ่านทาง popoverPresentationContController ของตัวแจ้งเตือน คุณต้องระบุ sourceView และ sourceRect หรือ barButtonItem หากไม่ทราบข้อมูลนี้เมื่อคุณแสดงตัวควบคุมการแจ้งเตือนคุณอาจระบุไว้ในวิธีการ UIPopoverPresentationControllerDelegate -prepareForPopoverPresentation