0
votes

Mettre à jour le contrôleur de vue racine après la connexion de l'utilisateur + iOS 13 et plus tard

Utilisation de la déléguée de scène, je suis capable de définir le contrôleur de vue root. (J'utilise Xcode 11.3 et iOS version 13.3 et exécuté mon application sur iPhone 6+ avec iOS 12.4)

Ce que je veux, c'est quand l'utilisateur se connecter , Je dois mettre à jour le contrôleur de vue racine. Pour cela, j'ai fait le suivant P> xxx pré>

de sorte que lorsque l'utilisateur se connecte à l'application, je dois supprimer un élément de l'onglet de la barre d'onglets et mettre à jour le contrôleur de vue racine. P>

Je fais donc comme suit. P>

func processLogin() {

  //performing login in this method so when login successful we setting root view controller
  callLoginAPI { response in

    if response.isSuccess {
       UserDefaults.standard.set(true, forKey: "isLogin")
       if #available(iOS 13.0, *) {
           SceneDelegate.shared.setRootViewControllerBasedOnLogin()
        } else {
          // Fallback on earlier versions
        }
    }
  }
}


4 commentaires

Ajoutez la fenêtre .MakekeyandVisible () et vérifier une fois


Je fais déjà dans SetROotViewControllerBasedonLogin () Méthode.


est-ce possible pour joindre votre projet,


Ici, il est: lect.google.com/file/d/ 1ERCQJ8-HYWNJTQYYYC8H0eweyXRQBZ / ...


3 Réponses :


1
votes

Voici comment j'ai géré la navigation pour la version plus ancienne et la nouvelle version. Donc, lorsque l'utilisateur dispose des derniers iOS, nous devons configurer la racine de Scedelegate Appdelegate

APPDELEGATE.SHIFT < / forte> xxx

scènetégate.swift xxx


4 commentaires

Je suis capable de définir le contrôleur de vue racine initialement. Mais après la connexion de l'utilisateur, j'essaie de mettre à jour le contrôleur de vue racine, mais rien ne se passe.


@MAHENDRRA - Je ne peux pas vous déconnecter, il n'y a plus de code pour changer la rootvc


Le projet n'a que l'interface utilisateur uniquement sans fonctionnalité. Ce que j'essaie d'être sur certains événements, je souhaite modifier le contrôleur de visualisation de la racine de ma demande. Pour le moment, prenez simplement un exemple comme lorsque l'utilisateur confirme la déconnexion, je souhaite définir l'écran de connexion comme contrôleur de vue racine.


J'essayais de définir le contrôleur de visualisation root avec un code différent et rien n'a fonctionné pour moi, donc je pourrais être commenté ou peut être supprimé ce code, je pense.



-1
votes

Le problème avec la réponse de Pinkeshgjr est qu'il éliminait l'objet de la fenêtre fourni par la scène. Voici ce que je ressens est une approche meilleure / plus simple:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    static var current: AppDelegate {
        return UIApplication.shared.delegate as! AppDelegate
    }

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        if #available(iOS 13, *) {

        } else {
            window = UIWindow();
            setUpRoot()
        }
        return true
    }

    func setUpRoot() {
        window?.rootViewController = ViewController(nibName: nil, bundle: nil)
        window?.makeKeyAndVisible()
    }
}

@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {    
        guard let windowScene = scene as? UIWindowScene else { fatalError() }
        let firstWindow = windowScene.windows.first ?? UIWindow(windowScene: windowScene)
        AppDelegate.current.window = firstWindow
        AppDelegate.current.setUpRoot()
    }
}


0 commentaires

0
votes
func presentYourView(from view: YourViwe) {
        if #available(iOS 13, *) {
            let mySceneDelegate = view.view.window?.windowScene?.delegate
            if let sceneDelegate = mySceneDelegate as? SceneDelegate {
                sceneDelegate.changeRootViewController(newViewController())
            }
        } else {
            (UIApplication.shared.delegate as? AppDelegate)?.changeRootViewController(newViewController())
        }
    }

0 commentaires