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> 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
}
}
}
}
3 Réponses :
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 scènetégate.swift strong> p> Scedelegate pour la version plus ancienne, nous devons configurer la racine de Appdelegate code>
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.
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()
}
}
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())
}
}
Ajoutez la fenêtre
.MakekeyandVisible () code> et vérifier une foisJe fais déjà dans
SetROotViewControllerBasedonLogin () Code> Méthode.est-ce possible pour joindre votre projet,
Ici, il est: lect.google.com/file/d/ 1ERCQJ8-HYWNJTQYYYC8H0eweyXRQBZ / ...