В иерархии навигации есть два шага вперед.
Стек навигации следует только в случае pushViewController
.В случае present
модально вам нужно инициировать новый стек навигации
let navVC = UINavigationController.init(rootViewController: viewController)
self.present(navVC, animated: true, completion: nil)
Где, viewController - это объект вашего нового UIViewController
.
Вместо использования UIApplication.shared.keyWindow?.rootViewController
каждый раз, когда вы должны использовать стек навигации (для push) и просматривать контроллер (для настоящего момента) как:
// Push
self.navigationController?.pushViewController(viewController, animated: true)
// Present Modally
self.present(viewController, animated: true, completion: nil)
Где, self
- это объект контроллера вида, а viewController
- объект нового UIViewController
.
Итак, ваш handleLogin()
включенLoginPage
будет выглядеть так:
// Push
@objc private func handleLogin() {
guard let vc = UIStoryboard.init(name: "Main", bundle: .main).instantiateViewController(withIdentifier: "SignOutVC") as? SignOutPage else { return }
self.navigationController?.pushViewController(vc, animated: true)
}
// Pop
@objc private func handleLogin() {
guard let vc = UIStoryboard.init(name: "Main", bundle: .main).instantiateViewController(withIdentifier: "SignOutVC") as? SignOutPage else { return }
let navVC = UINavigationController.init(rootViewController: vc)
self.present(navVC, animated: true, completion: nil)
}
И, handleSignOut()
на SignOutPage
будет выглядеть так:
// Push
@objc private func handleSignOut() {
self.navigationController?.popViewController(animated: true)
}
// Pop
@objc private func handleSignOut() {
self.dismiss(animated: true, completion: nil)
}
ПРИМЕЧАНИЕ. Необходимо установить идентификатор раскадровки следующим образом: