-
코드로 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 = "첫 화면" } }
그리고 빌드를 시켜보면, 다음과 같이 잘 적용된 것을 볼 수 있다.
'iOS > Swift' 카테고리의 다른 글
UISearchBar에서 사용자가 입력을 멈췄을 때 자동으로 검색하기(실시간 검색) (0) 2022.01.11 특정 모서리에만 CornerRadius 적용하기 (0) 2022.01.11 UITableViewCell 동적 높이 할당(UITableView Dynamic height) (0) 2022.01.11 UserDefaults에서 커스텀 객체 사용하기 (0) 2022.01.11 코드로 TabBar Controller 연결하기 (0) 2022.01.11