2017-07-05 4 views
1

Ich würde gerne wissen, wo ich den Root-View-Controller in der App-Programmierung ändern muss. unten ist mein CodeWie kann ich die Login-Sitzung in ios verwalten?

class NavigationViewController: UINavigationController { 

var window: UIWindow? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let storyBoard = UIStoryboard(name: "Main", bundle: nil) 
    let newRootView = storyBoard.instantiateViewController(withIdentifier: "WelcomeViewController") as! WelcomeViewController 
    let userStatus = UserDefaults.standard.bool(forKey: "isLoggedIn") 
    if userStatus { 
     self.window?.rootViewController = newRootView 
    } 

    } 
} 

ich für isLoggedIn Schlüssel als wahr, den Wert am Einstellung, wenn der Benutzer angemeldet und falsch, wenn der Benutzer so abgemeldet, dass ich den Wert in diesem Navigationscontroller Unterklasse abrufen kann, basierend auf das kann ich Wählen Sie den Root-View-Controller. Aber es funktioniert nicht gut, es bleibt gleich, wenn ich die App starte Ich bekomme die Login-Seite nur, obwohl ich bereits angemeldet, auch nicht vorschlagen, dass ich den Root-View-Controller innerhalb von didfinishlaunchingwithoption Methode ändern. Könnte mir jemand helfen, es zu lösen? Danke im Voraus.

+0

Haben Sie dies auf dem Gerät überprüft? –

+0

Simulator funktioniert nicht ordnungsgemäß für UserDefaults –

+1

versuchen Sie, zwei Übergänge vom Storyboard zu erstellen und führen Sie dann je nach Situation einen Code aus. – Roran

Antwort

0

Wenn ich das richtig das Ziel des Codes zu verstehen, wollen Sie direkt auf WelcomeViewController starten, wenn der Benutzer bereits angemeldet ist.

Sie könnten versuchen, eine benutzerdefinierte segue genannt ReplaceSegue und und Satz dieses ReplaceSegue gesetzt zu schaffen das Segment, das den NavigationViewController und den ViewController verbindet.

Und dann können Sie das Ziel Ihres Segments ändern.

class ReplaceSegue: UIStoryboardSegue { 

    override func perform() { 
     let storyBoard = UIStoryboard(name: "Main", bundle: nil) 
     let newRootView = storyBoard.instantiateViewController(withIdentifier: "WelcomeViewController") as! WelcomeViewController 
     sourceViewController.navigationController?.setViewControllers([newRootView], animated: true) 
    } 
} 
+0

Danke! Ja, ich muss den View-Controller einstellen und sollte nicht wie "self.window? .rootViewController = newRootView " machen, ich sollte tun "self.setViewControllers ([newRootView], animiert: true) " Keine Notwendigkeit, segues zu verwenden es funktioniert gut mit der oben genannten Linie von mir. –

+0

In der Lösung, die ich Ihnen vorgestellt habe, müssen Sie das rootView-Segue überschreiben, indem Sie Ihren UINavigationViewController mit Ihrem LoginViewController verbinden und meinen Code kopieren. –

-1

Zuerst Benutzeranmeldung Bool True in NSUserDefults setzen. wenn der Benutzer sich erfolgreich angemeldet hat.

UserDefaults.standard.set(true, forKey: "USERISLOGIN") 

Jetzt öffnen Appdelegate.swift -> didFinishLaunchingWithOptions Methode: -

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    if(UserDefaults.standard.bool(forKey: "USERISLOGIN")){ 

       let storyboard = UIStoryboard(name: "Main", bundle: nil) 

       let objLogoutVC = storyboard.instantiateViewController(withIdentifier: "LogoutVC") as! LogoutVC 
       let navigationController = UINavigationController(rootViewController: objLogoutVC) 

       navigationController.navigationBar.isTranslucent = false 
       navigationController.navigationBar.isHidden = true 
       self.window?.rootViewController = navigationController 
       self.window?.makeKeyAndVisible() 
      } 
    return true 
} 

Lassen Sie mich wissen, wenn Sie etwas mehr benötigt.

+0

"Bitte schlagen Sie mir nicht vor, den Root View Controller innerhalb von didfinishlaunchingwithoptions-Methode zu ändern" x) –

+0

löschen Sie zuerst Ihre Anforderung. –

+0

Tatsächlich machte @Desdenova diese Anforderung nicht klar genug. –

Verwandte Themen