SafariViewControllerDidFinish не срабатывает при смахивании вниз, чтобы закрыть
У меня есть представитель на SFSafariViewController
который очищает задачи в safariViewControllerDidFinish
событие. В iOS 13+ пользователь может провести пальцем вниз, чтобы закрыть, но в этом случае это событие не запускается. Я не хочу отключать этот жест, включивisModalInPresentation
.
Есть ли способ сделать safariViewControllerDidFinish
fire для этого случая, или как я могу обнаружить, что пользователь смахивает вниз, чтобы закрыть контроллер представления Safari?
1 ответ
Вы можете узнать, когда пользователь закрывает SFSafariViewController
проведя пальцем вниз, сделав себя делегатом контроллера презентации и переопределив presentationControllerDidDismiss(_:)
. Ознакомьтесь с документацией по этой теме.
Примечание: этот метод не будет вызван, если вы используете dismiss(animated:)
программно.
Ответ @Frankenstein сработал для меня, но мне потребовалось время, чтобы правильно настроить мой код, поэтому просто хочу добавить здесь несколько фрагментов кода
class MyViewController: UIViewController {
func presentSafariVC() {
let url = //...
let config = SFSafariViewController.Configuration()
let safariVC = SFSafariViewController(url: url, configuration: config)
safariVC.modalPresentationStyle = .formSheet
safariVC.delegate = self
safariVC.presentationController?.delegate = self
present(safariVC, animated: true)
}
}
extension MyViewController: SFSafariViewControllerDelegate, UIAdaptivePresentationControllerDelegate {
// click top left "Done" button and dismissed
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
// do your stuff
}
// swipe down and dismissed
func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
// do your stuff
}
}
Кроме того, я изначально искал способ предотвратить смахивание вниз, чтобы отклонить представленный vc, но, похоже, настройка
safariVC.isModalInPresentation = true
не действует, я все еще могу смахнуть вниз, чтобы закрыть его. Это наблюдается в симуляторе XCode 12, iOS 14.2.