在某些情况下(iPhone X,iOS 13),可以通过从顶部拉动来使用手势来取消已呈现的视图控制器。
在这种情况下,我似乎找不到一种方法来通知呈现视图控制器。我错过了什么吗?
我唯一发现的方法是将一个委托方法添加到已呈现的视图控制器的viewDidDisappear中。
例如:
class Presenting: UIViewController, PresentedDelegate {
func someAction() {
let presented = Presented()
presented.delegate = self
present(presented, animated: true, completion: nil)
}
func presentedDidDismiss(_ presented: Presented) {
// Presented was dismissed
}
}
protocol PresentedDelegate: AnyObject {
func presentedDidDismiss(_ presented: Presented)
}
class Presented: UIViewController {
weak var delegate: PresentedDelegate?
override func viewDidDisappear(animated: Bool) {
...
delegate?.presentedDidDismiss(self)
}
}
通过通知(notifications)管理这个问题也是可能的,使用vc子类,但这仍然不够理想。
extension Notification.Name {
static let viewControllerDidDisappear = Notification.Name("UIViewController.viewControllerDidDisappear")
}
open class NotifyingViewController: UIViewController {
override open func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
NotificationCenter.default.post(name: .viewControllerDidDisappear, object: self)
}
}
一定有更好的方法来实现这个?