How to detect when a popover is dismissed in iOS 9
The updated answer for this issue.
All credit to this answer:
The method you must use on iOS 13: - (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController
Not sure which method you're referring to as being deprecated but you can still use the UIPopoverPresentationControllerDelegate
to achieve this. Something like:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "popoverSegue" {
let vc = segue.destinationViewController
sortVC.modalPresentationStyle = .Popover
sortVC.popoverPresentationController?.sourceRect = filterButton.bounds
sortVC.preferredContentSize = CGSizeMake(216, 150)
sortVC.popoverPresentationController!.delegate = self
}
}
And then use the
func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController)
method to handle its dismissal.
The popoverControllerDidDismissPopover:
method has been replaced by popoverPresentationControllerShouldDismissPopover:
because UIPopoverControllerDelegate
has been replaced by the UIPopoverPresentationControllerDelegate
.
From your presenting view controller, conform to the new protocol and set the delegate for the popover presentation controller in prepareForSegue:
:
class MyPresentingViewController: UIViewController, UIPopoverPresentationControllerDelegate {
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let popoverPresentationController = segue.destinationViewController.popoverPresentationController {
popoverPresentationController.delegate = self
}
}
func popoverPresentationControllerShouldDismissPopover(popoverPresentationController: UIPopoverPresentationController) -> Bool {
return true
}
}
You can then use the delegate method to handle detection of the dismissal in the way that you were previously intending.