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 응용 프로그램에서 UIAlertControllerStyleActionSheet 스타일의 UIAlertController (<UIAlertController : 0x17858a00>)를 제시했습니다. 이 스타일을 가진 UIAlertController의 modalPresentationStyle은 UIModalPresentationPopover입니다. 경보 컨트롤러의 popoverPresentationController를 통해이 팝 오버에 대한 위치 정보를 제공해야합니다. sourceView 및 sourceRect 또는 barButtonItem을 제공해야합니다. 경보 제어기를 제시 할 때이 정보를 알 수없는 경우 UIPopoverPresentationControllerDelegate 메소드 -prepareForPopoverPresentation에서 제공 할 수 있습니다.