Sehr ähnlich wie Instagram, hat der Hauptteil meiner App fünf Registerkarten mit fünf ViewControllern, die alle über Navigationscontroller mit einem tabBar Controller verbunden sind. Wenn der Benutzer auf die Schaltfläche "Abmelden" klickt, möchte ich den Benutzer zurück an die Login-VC senden können, die sich vor der TabBar-VC befindet (wie im Bild gezeigt) und auch "alles", das der tabBar-Steuerung (1 X-Tab VC, 5 X Navigation VC, 5 X ViewControllers) Ich kann nicht einfach "DismissViewControllerAnimated-Methode" tun, weil ich beim Start, legen Sie die Registerkarte VC als die ursprüngliche VC, wenn der Benutzer zuvor angemeldet haben. Dies wird durch Folgendes erreicht Code im AppDelegateZerstörung der aktuellen TabbarVC nach Instanziierung neuer VC
func tryToLogin() {
if let userUid = NSUserDefaults.standardUserDefaults().valueForKey(KEY_USER_UID) {
print("User Exists in NSUserDefault = \(userUid)")
updateUserGlobalVariables()
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarVC = storyboard.instantiateViewControllerWithIdentifier("TabBarVC") as! UITabBarController
window?.rootViewController = tabBarVC
}
}
im Moment, wenn sich der Benutzer abmeldet, I „instantiateViewControllerWithIdentifier“ der LoginVC zurück zu gehen als LoginVC nie, wenn der Benutzer bereits angemeldet hat erscheinen. es scheint jedoch, wie Wenn ich mich mit einem anderen Konto wieder anmelde, werden einige Daten von meinen Variablen abgerufen wird zurückgeholt, als ob der VC/TabBarVC niemals zerstört wird. Hier geht es im Moment zu meinem LoginVC.
func goToLoginVC() {
let facebookManager = FBSDKLoginManager()
facebookManager.logOut()
do {
try FIRAuth.auth()?.signOut()
self.removeCurrentUserDataFromDisk()
// Dont use dismiss as sometimes the root VC is not login VC
let loginVC = self.storyboard?.instantiateViewControllerWithIdentifier("LoginVC") as! LoginVC
self.presentViewController(loginVC, animated: true) {
self.removeFromParentViewController()
}
} catch let error as NSError {
showErrorAlert("Error", message: "\(error.localizedDescription)")
}
}
Also ich denke, mit anderen Worten, Wie kann ich das gleiche Ergebnis erzielen wie dismissViewControllerAnimated von 1. InstantiateViewControllerWithIdentifier 2. Zerstören, was übrig blieb dahinter befestigt war tabBarVC
Hier ist ein Screenshot mein Drehbuch
Dank
Eine Option wäre, den 'rootViewController' des Fensters zu ändern und die vorher sichtbare Ansicht nach dem Wechsel zu verwerfen. Der "Nachteil" ist, dass Sie benutzerdefinierte Übergänge erstellen müssen, wenn Sie fließende Übergänge wünschen. – xoudini
Sie sollten in der Lage sein, ein Abwicklungssegment zu verwenden, um von jedem beliebigen Ort zum Anmelde-VC zurückzukehren. Dazu müssen Sie jedoch einen Übergang von der Anmelde-VC zur Registerkarten-VC verwenden, anstatt presentViewController zu verwenden, aber das ist ziemlich einfach – Paulw11