ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • iOS - Storyboard에서 만든 VC를 코드로 접근하는 방법
    Programming/iOS 2022. 1. 25. 15:03

    안녕하세요 BeePeach입니다 :)

     

    오늘 공부해볼 내용은 Storyboard에 만들어둔 ViewController를 코드를 통해서 접근하는 방법에 대해서 알아보도록 하겠습니다.

     

    이전 포스팅에서 InterfaceBuilder를 통해 ViewController(VC)를 만들었지만 이 VC를 코드로 제어하는 방법에 대해서는 알아보지 않았습니다.

    Storyboard에 있는 VC를 코드와 연결하기 위해서는 선행 작업이 필요합니다.

    (프로젝트를 맨 처음 생성했을 때 만들어져 있는 VC는 이미 이 작업이 되어있습니다.)

     

     


     

    Scene과 코드 연결하기

     

     

    프로젝트를 생성하면 ViewController라는 swift파일이 하나 만들어져 있습니다.

    이 파일에는 UIViewController 클래스를 상속하는 ViewController라는 클래스가 정의되어 있죠.

    이 ViewController 클래스는 프로젝트를 생성했을 때 Main.storyboard에 기본적으로 만들어져 있는 Scene과 연결되어 있습니다.

     

     

    Storyboard에서 Scene을 선택하고 오른쪽에 Identity Inspector를 확인해보면 만들어져있는 ViewController와 연결되어 있는 것을 확인할 수 있습니다.

     

     

    반면에 우리가 직접 생성한 Second storyboard에 Scene은 아무것도 설정이 되어있지 않은 것을 확인할 수 있습니다.

    만약 이 VC도 코드로 이벤트를 처리하고 싶다면 UIViewController를 상속하는 CustomViewController를 정의하고 연결시켜줘야합니다.

     

    이렇게 이벤트가 발생했을 때 코드로 처리하기 위해서는 Scene과 UIViewController를 상속한 클래스가 서로 연결이 되어있어야 합니다.

     

     


     

    코드로 StoryBoard에 접근하는 방법

     

    이전 포스팅에서는 화면에 표시된 second 버튼을 누르면 segue를 통해서 알아서 Second storyboard에 만들어둔 Scene으로 화면 전환이 이루어졌습니다.

     

    이번에는 segue를 이용하는 게 아니라 코드를 통해서 Storyboard에 접근하고 이 storyboard에 만들어둔 VC에 접근하는 방법에 대해서 공부해보겠습니다.

     

     

    코드로 Storyboard 파일에 접근하기 위해서 UIStoryboard 클래스를 이용합니다.

    이 클래스의 생성자인 init(name:bundle:)을 이용해서 우리가 만든 storyboard에 접근할 수 있습니다.

     

     

    첫 번째 파라미터로 storyboard의 이름을 전달합니다. 우리는 Second.storyboard 파일에 접근하는 것이 목표이므로 name에는 "Second"를 전달했습니다.

    두 번째 파라미터로는 bundle을 전달합니다. 지금은 main 번들에서 storyboard를 만들었으므로 .main을 전달해주면 됩니다.

    nil을 전달하면 Bundle.main을 전달한 것과 같습니다.

     

    이렇게 하면 이제 우리는 Second storyboard에 접근할 수 있게 됐습니다.

    그럼 접근한 storyboard에 만들어놓은 저 빨간색 뷰를 가진 ViewController에는 어떻게 접근할 수 있을까요??

     

     


     

    코드로  Storyboard에 만들어진 ViewController에 접근하는 방법

     

    Storyboard에 만들어진 VC에 접근할 때는 UIStoryboard에서 제공하는 메서드를 이용합니다.

     

     

    Storyboard에 InitialVC로 설정된 VC를 생성하는 instantiateInitialViewController() 메서드와

    StoryboardID로 VC를 생성하는 instantiateViewController(withIdentifier:) 메서드가 있는데

    StoryboardID를 이용하는 instantiateViewController(withIdentifier:) 메서드를 주로 사용합니다.

     

    두 메서드는 리턴해주는 Type이 다릅니다.

     instantiateInitialViewController()는 옵셔널 타입을 리턴해줍니다.

    이유는 storyboard에 initialVC를 설정할 수도 있고 안 할 수도 있으니까요.

     

     

    StoryboardID는 Scene을 선택하고 오른쪽 Identity Inspector를 보면 설정할 수 있습니다.

     

     

    설정한 StoryboardID를 가지고 VC를 생성할 수 있습니다. 

    이제 storyboard에서 만든 VC에 접근할 수 있게 됐습니다.

    Modal To Code 버튼을 클릭하면 modal 방식으로 화면 전환하도록 코드를 작성하면 똑같은 화면 전환을 구현할 수 있습니다.

     

    주의 사항은 instantiateViewController(withIdentifier:)에 만약 잘못된 StoryboardID를 전달한다면 crash가 발생하고 앱이 종료됩니다.

    그래서 오타 없이 StoryboardID 전달하는 게 중요합니다.

     

     

     


     

    참고 자료

     

    https://developer.apple.com/documentation/uikit/uistoryboard

     

    Apple Developer Documentation

     

    developer.apple.com

     

     

    https://kxcoding.com

     

    여러분의 새로운 도전을 응원합니다 | KxCoding

    Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기

    kxcoding.com

     

     


     

    728x90

    'Programming > iOS' 카테고리의 다른 글

    iOS - UIScrollView 사용하기  (0) 2022.01.31
    iOS - Storyboard Merge Conflict  (0) 2022.01.30
    iOS - Storyboard file 추가하는 방법  (0) 2021.12.15
    iOS - Storyboard 살펴보기  (0) 2021.12.14
    iOS - Foundation  (0) 2021.10.15
Designed by Tistory.