iOS 로그아웃 후 로그인 화면에서 화면 전환 문제 해결기
로그아웃 버튼을 눌러 LoginViewController로 화면 전환 시, 정상적으로 LoginViewController 화면은 나오지만, 로그인 화면에서 회원가입(signup) 버튼을 눌러도 다음 화면이 나타나지 않는 현상이 발생했습니다.
pushViewController 방식으로 동작하도록 구현되어 있습니다. SceneDelegate를 통해 LoginViewController를 rootViewController로 단독 설정하였습니다.LoginViewController를 단독으로 rootViewController에 설정하면, 네비게이션 컨트롤러가 없기 때문에 pushViewController 호출 시 동작하지 않습니다. LoginViewController를 네비게이션 컨트롤러에 감싸서 rootViewController로 설정해야 한다는 결론을 내렸습니다.SceneDelegate에서 로그아웃 시 다음과 같이 수정하였습니다:
@objc private func logoutTapped() {
if let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate,
let window = sceneDelegate.window {
let loginVC = LoginViewController()
let navController = UINavigationController(rootViewController: loginVC)
window.rootViewController = navController
UIView.transition(with: window,
duration: 0.3,
options: .transitionFlipFromRight,
animations: nil,
completion: nil)
}
}
로그아웃 후 회원가입 버튼 클릭 시 정상적으로 다음 화면으로 전환되는 것을 확인하였습니다.
로그아웃 후 로그인 화면으로 복귀할 때 반드시 LoginViewController를 UINavigationController로 감싸서 rootViewController로 설정해야 합니다.
@objc private func logoutTapped() {
if let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate,
let window = sceneDelegate.window {
let loginVC = LoginViewController()
let navController = UINavigationController(rootViewController: loginVC)
window.rootViewController = navController
UIView.transition(with: window,
duration: 0.3,
options: .transitionFlipFromRight,
animations: nil,
completion: nil)
}
}