1
votes

Problème lors du rejet d'un viewController vers rootViewController

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.


1 commentaires

Pourquoi appelez-vous "popToRootViewController"? Vous pouvez utiliser "AppDel.window? .RootViewController.navigationController.setV‌ iewControllers" avec root viewController et animation.


3 Réponses :


0
votes
  • Pourquoi avez-vous ignoré votre contrôleur de navigation avant d'appeler popToRootViewController ?
  • 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
      }
      

0 commentaires

1
votes

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()
            }
        }
    }


0 commentaires

1
votes

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)    
    })


1 commentaires

Heureux d'entendre!! Codage heureux