[TIL] 영화 예매 앱 트러블 슈팅

Eden·2025년 7월 18일

iOS 로그아웃 후 로그인 화면에서 화면 전환 문제 해결기

문제 발생

로그아웃 버튼을 눌러 LoginViewController로 화면 전환 시, 정상적으로 LoginViewController 화면은 나오지만, 로그인 화면에서 회원가입(signup) 버튼을 눌러도 다음 화면이 나타나지 않는 현상이 발생했습니다.

  • 회원가입 버튼은 네비게이션 스택에서 pushViewController 방식으로 동작하도록 구현되어 있습니다.
  • 로그아웃 시 SceneDelegate를 통해 LoginViewController를 rootViewController로 단독 설정하였습니다.

원인 분석 및 의사결정

  • LoginViewController를 단독으로 rootViewController에 설정하면, 네비게이션 컨트롤러가 없기 때문에 pushViewController 호출 시 동작하지 않습니다.
  • 회원가입 버튼이 push로 화면 전환을 처리하는 이상, 반드시 네비게이션 컨트롤러를 포함한 뷰 계층이어야 합니다.
  • 따라서 로그아웃 후에도 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)
        }
    }
  • 로그아웃 후 회원가입 버튼 클릭 시 정상적으로 다음 화면으로 전환되는 것을 확인하였습니다.


최종 해결 방법 정리

로그아웃 후 로그인 화면으로 복귀할 때 반드시 LoginViewControllerUINavigationController로 감싸서 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)
    }
}
profile
iOS Dev

0개의 댓글