I am using my custom alert to log out of the application
in custom alert, I have tried to log out with firebase after the successful logout using navigation push controller to sign in the controller but it will not redirect to sign in screen
Here is my custom alert code
let customAlert = self.storyboard?.instantiateViewController(withIdentifier: "CustomAlertID") as! AlertViewController
customAlert.titleLbl = "Log out"
customAlert.imageTitle = "logout"
customAlert.descryptionText = "You will be returned to the login screen. Are you sure you want to logout?"
customAlert.okBtnText = "LOG OUT"
DispatchQueue.main.async {
customAlert.providesPresentationContextTransitionStyle = true
customAlert.definesPresentationContext = true
customAlert.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
customAlert.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
self.present(customAlert, animated: true, completion: nil)
}
Here is my logout click button code
let firebaseAuth = Auth.auth()
do {
try firebaseAuth.signOut()
let controller = self.storyboard?.instantiateViewController(withIdentifier: "SignInViewController") as! SignInViewController
self.navigationController?.pushViewController(controller, animated: true)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.navigationController?.popToRootViewController(animated: true)
}
let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)
UserDefaults.standard.synchronize()
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)
} catch let signOutError as NSError {
self.dismiss(animated: true, completion: nil)
print("Error signing out: %@", signOutError)
}
}
without the alert view, it will works
2
Answers
In order for the navigationController property to not be equal to
nil
, you must add your custom alertViewController to the navigation stack usingpushViewController
method. In your case, you are only presenting a custom alertViewController that does not know anything about yournavigationController
There is another way to implement:
After initializing a custom view controller, you should pass it the necessary closure functions that should work after pressing the button
Example:
After Logout, you should set Another Root view controller and Your navigationController Stack Must be Clear.