web-dev-qa-db-fra.com

La feuille de détection a été ignorée sur iOS 13

Avant iOS 13, présentait les contrôleurs de vue utilisés pour couvrir tout l'écran. Et, lorsqu'elle a été supprimée, la fonction du contrôleur de vue parent viewDidAppear a été exécutée.

Désormais, iOS 13 présentera les contrôleurs de vue sous forme de feuille par défaut, ce qui signifie que la carte couvrira partiellement le contrôleur de vue sous-jacent, ce qui signifie que viewDidAppear ne sera pas appelé, car le contrôleur de vue parent n'a jamais réellement disparu.

Existe-t-il un moyen de détecter que la feuille de contrôleur de vue présentée a été supprimée? Une autre fonction que je peux remplacer dans le contrôleur de vue parent plutôt que d'utiliser une sorte de délégué?

73
Marcos Tanaka

Remplacez viewWillDisappear sur le UIViewController qui est en cours de rejet. Il vous alertera d'un licenciement via isBeingDismissed drapeau booléen.

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    if isBeingDismissed {
        print("user is dismissing the vc")
    }
}

** Si l'utilisateur à mi-chemin du balayage vers le bas fait glisser la carte vers le haut, il sera toujours enregistré comme étant rejeté, même si la carte n'est pas rejetée. Mais c'est un cas Edge dont vous ne vous souciez peut-être pas.

0
craft

rapide

Solution générale à appelerviewWillAppear in iOS1

class ViewController: UIViewController {

        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            print("viewWillAppear")
        }

        //Show new viewController
        @IBAction func show(_ sender: Any) {
            let newViewController = NewViewController()
            //set delegate of UIAdaptivePresentationControllerDelegate to self
            newViewController.presentationController?.delegate = self
            present(newViewController, animated: true, completion: nil)
        }
    }

    extension UIViewController: UIAdaptivePresentationControllerDelegate {
        public func presentationControllerDidDismiss( _ presentationController: UIPresentationController) {
            if #available(iOS 13, *) {
                //Call viewWillAppear only in iOS 13
                viewWillAppear(true)
            }
        }
    }
0
dimo hamdy