Action après dismiss

Bonjour,

J’affiche un viewController avec cette fonction :

> present(_loginViewController, animated: true, completion: nil)

Et une fois mon traitement terminé, dans mon viewController qui a été affiché par la fonction précédente, je le cache avec la cette fonction :

> dismiss(animated: true, completion: nil)

Mon soucis, c’est que quand le dismiss est appelé, je voudrais faire une action dans mon viewController de base. Or, on ne repasse pas dans le viewWillAppear par exemple dans ce contexte. Je pense qu’il va falloir utiliser la complétion du dismiss mais je ne vois pas trop comment le faire.

Si vous pouvez m’éclairer :slight_smile:
Merci

Hello,

Ce que tu peu fair c’est d’utiliser les notification local. Tu post une notification dans le completion handler :slight_smile:

Sinon tu peux utiliser la propriété ‘presentingViewController’ disponible depuis ton écran modal juste avant d’appeler le dismiss
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621430-presentingviewcontroller

1 « J'aime »

Merci Maxime pour l´astuce.

Hello et merci à vous deux pour vos réponses

@mbritto, j’ai une question cependant, peut-être que j’utilise mal le paramètre que tu m’as donné.

Juste avant mon dismiss, je fais ça :

if let rootViewController = self.presentingViewController {
        print("RootViewController : \(String(describing: rootViewController))")
} 

Et le résultat de mon print est le suivant :

RootViewController : <UITabBarController: 0x153d0f0d0

Je suis étonné de ne pas retrouver un objet de type ProfileViewController qui appelle cette vue modale.

Edit : Et si je met : presentingViewController?.parent je n’entre pas dans mon if …

Je suppose que ton premier écran est intégré dans un UITabBarController donc tu peux retrouver l’écran en question via la propriété selectedViewController (https://developer.apple.com/documentation/uikit/uitabbarcontroller/1621172-selectedviewcontroller)
Par exemple, en une seule ligne : self.presentingViewController?.selectedViewController

En effet, (en fait, il y a même un TabBarController et un NavigationController en cascade !)

Et du coup, ça fonctionne bien :slight_smile:

Voilà donc le truc complet si ça peut servir :wink:

 if let tabBarController = presentingViewController as? UITabBarController {
            if let navigationController = tabBarController.selectedViewController as? UINavigationController {
                let rootViewControllers = navigationController.viewControllers
                let rootViewController  = rootViewControllers[0]
                
                if let profileViewController = rootViewController as? ProfileViewController {
                    profileViewController.updateDisplay()
                }
                
                if let orderViewController = rootViewController as? OrderViewController {
                    orderViewController.updateDisplay()
                }
            }
        }
        
        dismiss(animated: true, completion: nil)

Merci Maxime :slight_smile: