J'essaie de rejeter un viewController vers rootViewController pendant que signOut. Mais le problème est que le viewController n'est pas rejeté, il reste toujours dans la même page. Ci-dessous, j'ai mentionné le code que j'ai utilisé.
let AppDel = UIApplication.shared.delegate as! AppDelegate
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let login = mainStoryboard.instantiateViewController(withIdentifier: "login")
let nav = UINavigationController(rootViewController: login)
AppDel.window!.rootViewController = nav
AppDel.window?.rootViewController?.dismiss(animated: true, completion: nil)
(AppDel.window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: true)
login.navigationController?.setNavigationBarHidden(true, animated: false)
Merci d'avance.
3 Réponses :
AppDel.window? .rootViewController? .dismiss (animé: vrai, achèvement: nul)
Vérifiez si vous appelez cela depuis le thread principal. Ajoutez votre code à l'intérieur de ce bloc:
DispatchQueue.main.async {
// TODO: Your code
}
dans le délégué App, tapez une fonction qui prend le nouveau contrôleur de vue et le définit comme root. que rejette l'ancien.
func updateRootViewController(with viewController: UIViewController) {
guard let oldViewController = self.window?.rootViewController else { return }
UIView.transition(from: oldViewController.view, to: viewController.view, duration: 0.3, options: [.transitionCrossDissolve, .allowAnimatedContent]) { _ in
self.window!.rootViewController = viewController
self.window!.makeKeyAndVisible()
oldViewController.dismiss(animated: false) {
oldViewController.view.removeFromSuperview()
}
}
}
Plus tôt, j'ai été confronté au même problème. J'ai été résolu par le problème en effectuant toutes les autres opérations après avoir ignoré le contrôleur avec succès.
Veuillez consulter l'exemple de code ci-dessous. Je suis sûr que cela fonctionnera pour vous.
AppDel.window?.rootViewController?.dismiss(animated: true, completion: {
(AppDel.window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: true)
login.navigationController?.setNavigationBarHidden(true, animated: false)
})
Heureux d'entendre!! Codage heureux
Pourquoi appelez-vous "popToRootViewController"? Vous pouvez utiliser "AppDel.window? .RootViewController.navigationController.setV iewControllers" avec root viewController et animation.