2016-08-06 8 views
0

Meine App hat die folgende Strömung, wenn der Benutzer inDismissViewController Swift

Loading Screen -----> Main Screen -----> Rest of App

und die folgende Strömung wird protokolliert, wenn er nicht:

Loading Screen -----> Login Screen -----> Main Screen -----> Rest of App

Jetzt bin der Umsetzung ich die Logout-Funktion . Ich habe den folgenden Code in main Screen hinzugefügt:

func handleLogout() { 
     if self.presentingViewController != nil { 
      var vc = self.presentingViewController 
      while ((vc!.presentingViewController) != nil) { 
       vc = vc!.presentingViewController 
      } 
      vc?.dismissViewControllerAnimated(true, completion: { 
      }) 
     } 
} 

Dies funktioniert gut, wenn der 1st Weg folgt (der Benutzer angemeldet wurde, wenn die App gestartet wurde) wie die App kehrt zum Loading Screen und lädt dann nach oben die Login Screen wie erwartet. Wenn jedoch der Pfad 2nd gefolgt wurde (der Benutzer war nicht angemeldet, als die App gestartet wurde, und Login Screen wurde verwendet) dieser Code führt zu der Login Screen wird direkt geöffnet und der gesamte Abmeldeprozess fehlgeschlagen. Gibt es eine Möglichkeit, dass ich sicherstellen kann, dass der Loading Screen derjenige ist, der immer von diesem Code geladen wird, unabhängig davon, welcher der beiden Pfade befolgt wurde.

+1

Sind Sie mit Storyboards? Wenn dies der Fall ist, erstellen Sie einfach einen Abwicklungsbereich zum Ladebildschirm und rufen Sie ihn von wo auch immer Sie möchten – Paulw11

Antwort

1

Verwenden Sie Abwicklungssegmente!

Sie fügen grundsätzlich einen Abwicklungsabschnitt hinzu, der Ihren "Hauptbildschirm" und "Anmeldebildschirm" verbindet. Geben Sie ihm einen Identifikator und Sie können den Übergang wann immer Sie wollen initiieren. In handleLogout:

func handleLogout() { 
    self.performSegueWithIdentifier("your identifier", sender: self) 
} 

Für Details, wie eine Abwickelstation segue zu erstellen: https://www.andrewcbancroft.com/2015/12/18/working-with-unwind-segues-programmatically-in-swift/

0

Dies ist nur ein Vorschlag hier geht:

In AppDelegate Datei, die Sie so etwas wie dies tun können:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     //Implement this method 
     let userLoggedIn = isUserLoggedIn(); 
     if !userLoggedIn { 
      let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) 
      //Instantiate the login view controller 
      window?.rootViewController = storyboard.instantiateViewControllerWithIdentifier("login") 
      window?.makeKeyAndVisible() 
     } 

     return true 
    } 

Jetzt, wenn die Anwendung startet, es wird zunächst der Login-Zustand und die Anzeige des Benutzers überprüfen die entsprechende Ansicht.

Hinweis: Dies ist vorausgesetzt, Sie Storyboards und die Wurzel-View-Controller verwenden, wird auf den Main Screen

0

Wenn Sie Storyboards verwenden, würde ich vorschlagen, die Erstellung von Storyboard rein für Ihre Login-Ansicht/s verwendet wird. Dann können Sie in der AppDelegate DidFinishLoading-Methode das Login-Storyboard anzeigen, wenn sie sich anmelden oder das Haupt-Storyboard anzeigen müssen, wenn sie bereits angemeldet sind. Sie können Storyboards jederzeit austauschen und es ist einfach zu erledigen. Das wird den Fluss etwas vereinfachen. Das mache ich normalerweise in meinen Apps. Wenn Sie Beispielcode benötigen, lassen Sie es mich wissen.