본문 바로가기
Swfit

storyboard 없이 navigationItem 사용하기

by GGShin 2022. 12. 22.

storyboard를 사용하지 않으면 main 파일 자체를 삭제하기도 합니다. 

그런 경우 viewcontroller에서 navigationItem을 사용하고 싶다면 SeceneDelegate (혹은 AppDelegate)에서 어떻게 rootViewController를 설정해야 하는지 알아보겠습니다.

 

Navigation Item을 사용할 일이 없는 경우는 보통 아래처럼 rootViewController를 설정하게 됩니다. 

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
       
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        window = UIWindow(windowScene: windowScene)
        let viewController = ViewController()
        
        //window의 rootViewController를 원하는 viewController의 인스턴스로 설정해주면 됩니다.
        window?.rootViewController = viewController
        window?.makeKeyAndVisible()
        
    
    }

 

이런 경우는 rootViewController가 일반적인 viewController가 됩니다.

 

하지만 이렇게 설정한 후에, ViewController.swift에서 navigationItem을 사용하려고 한다면 전혀 작동하지 않습니다. (설정한다고 해서 컴파일이나 런타임 에러가 발생하지는 않습니다!)

 

만일 navigationItem을 사용하고자 한다면 rootViewController를 UINavigationController로 설정해주어야 합니다.

 

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
       
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        window = UIWindow(windowScene: windowScene)
        let viewController = ViewController()
        
        //rootViewController를 UINavigationController로 설정해줍니다.
        //그리고 UINavigationController의 rootViewController에 가장 먼저 유저에게 보여주고 싶은
        //viewController instance를 할당해줍니다.
        window?.rootViewController = UINavigationController(rootViewController: viewController)
        window?.makeKeyAndVisible()
        
    
    }

 

이렇게 rootVC 자체를 UINavigationController로 설정해두어야지만 navigationItem 항목들을 설정했을 때 실제로 사용이 가능해 지게 됩니다. :)

 

rootViewController를 UINavigationController로 설정하지 않았을 때도 navigationItem에 접근은 가능했고 에러도 발생하지 않았기에 어떤게 문제인가 궁금했던 부분이었습니다. 제대로 된 설정방법을 알았으니 잊지 않을 것 같습니다 :)

 

감사합니다.

반응형

'Swfit' 카테고리의 다른 글

Apple 인증서 종류  (0) 2023.01.04
Status bar 색상 변경하기!  (0) 2023.01.01
Multiple-commands-produce-Error 해결방법  (0) 2022.12.18
I cant find push notifications in xcode  (0) 2022.12.18
ReactorKit 기본 개념  (0) 2022.12.11