본문 바로가기
TIL

250529 TIL | 코드로 Navigationcontroller 구현하기

by 23g 2025. 5. 29.

코드로 내비 구현하기

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    
    guard let windowScene = (scene as? UIWindowScene) else { return }
    
    window = UIWindow(windowScene: windowScene)

    let naviController = UINavigationController(rootViewController: ViewController())
    
    window?.rootViewController = naviController
    window?.makeKeyAndVisible()
  }

 

SceneDelegate 파일에 위와 같이 구현해주면 됨!

 

근데 이 코드를 보니 루트 뷰 컨트롤러가 뭔지 했갈렸다

 

그래서 뷰컨이 루트라는거임? 내비컨이 루트라는거임???

 

루트 뷰 컨트롤러는?

  • ViewController()는 루트가 아님
  • UINavigationController가 루트 뷰 컨트롤러임 → window?.rootViewController = naviController

 

그럼 ViewController는 뭐임?

  • ViewController()는 UINavigationController의 루트 뷰 컨트롤러
  • UINavigationController(rootViewController: ViewController())
  • 즉, 화면에는 ViewController가 처음 보이지만,
    그걸 감싸고 있는 컨트롤러는 UINavigationController

 

계층 구조 예시:

UIWindow
└── UINavigationController  ← window의 루트
    └── ViewController      ← 네비게이션 스택의 루트

 

정리하자면!!!

 

내비컨은 루트 뷰 컨

뷰컨은 내비컨의 루트 뷰 컨

 

헷갈린다 ㅎ