ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 코드로 Navigation Controller 연결하기
    iOS/Swift 2022. 1. 11. 22:30

    안녕하세요!! 코드로 Navigaiton Controller를 연결하는 방법을 정리해보았습니다.

    노션에서 작성한 글을 옮겨 말이 짧습니다. 양해해주세용😽


     

    스토리보드에서는 간편하게 ViewController를 누르고 Editor → Embed in → Navigation Controller로 네비게이션 컨트롤러를 적용할 수 있지만, 평소 코드로 개발하는 것을 선호해서 코드를 통해 Navigation Controller를 적용하는 방법을 찾아보았다.

     

    우선, 프로젝트 파일 → TARGETS → Info탭으로 넘어간다.

    이곳에서 Main storyboard file base name, 그리고

    Application Scene Manifest → Scene Configuration → Application Session Role → Item 0 까지 들어간 다음,

    Storyboard Name을 삭제해주면 된다.

     

    여기까지 진행하고 시뮬레이터를 작동시키면 아무 화면도 보이지 않는 것을 볼 수 있다.

    루트뷰를 지정하지 않아 발생하는 문제인데,

    스토리보드에서도 Is Initial View Controller를 지정하지 않으면 같은 문제가 발생한다.

    이제, SceneDelegate에서 코드를 통해 화면을 연결시킬 수 있다.

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

    SceneDelegate 메소드 중 위 메소드를 이용하면 된다.

     

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
            
            guard let windowScene = (scene as? UIWindowScene) else { return }
            self.window = UIWindow(windowScene: windowScene)
            let mainVC = ViewController()
            let nav = UINavigationController(rootViewController: mainVC)
            self.window?.rootViewController = nav // <- Is Initial View Controller!
            self.window?.makeKeyAndVisible()
    
    		// window.makeKeyAndVisible() 의미
    		// keyWindow로 설정하겠다.
    		// keyWindow: window가 여러개 존재할 때, 가장 앞쪽에 배치된 window를 `key window`라고 지칭
        }

    SceneDelegate에 코드를 작성한 뒤, 연결이 잘 됐는지 확인해보기 위하여 ViewController에 배경색, Title을 추가시켰다.

     

    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.view.backgroundColor = .systemTeal
            self.navigationItem.title = "첫 화면"
        }
    }
    

    그리고 빌드를 시켜보면, 다음과 같이 잘 적용된 것을 볼 수 있다.

    댓글

Designed by Tistory.