ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] swift에서의 화면 전환 구현하기
    Develop/Web & Framework 2020. 7. 30. 05:15

     

    새로운 언어에 대한 백그라운드 지식도 없이 프로젝트를 시작하면서 그 때 그 때 필요한 문법들을 익히는 방식으로 언어를 배우니까 삽질도 두 배, 머릿 속에서 여러 개념들이 얽히는 건 덤이다...

    오늘은 어제 꽤나 애를 먹었던 viewController간의 화면 전환.

     

    swift에서 view를 전환하는 방식에는 여러 가지가 있다.

    1. 다른 ViewController를 호출(Present)하는 방식
    
    2. NavigationController를 사용한 화면 전환(Push/Pop)
    
    3. storyboard에서의 segue

     

    1. 다른 ViewController를 호출(Present)하는 방식

    다른 ViewController를 Modal로 띄우는 방식이다.

    현재 위치한 View에서 해당 버튼을 누르면, 다른 viewController로 전환되게 구현하고자 한다.

     

    먼저 class에 해당 버튼에 대한 action method를 생성하고,  (control+DRAG)

    action method에 , "MainView"라는 identifier를 가지는 View를 호출하는 코드를 작성한다.

    ※ 호출하고자 하는 View의 identifier(위 코드에서 "MainView")는 Storyboard의 Identify Inspector에서 설정할 수 있다

    Storyboard

     

    다시 이전 view로 돌아가고자 할 때에는, 해당 동작을 수행할 action에 dismiss를 정의해주면 된다!


    2. NavigationController를 사용한 화면 전환(Push/Pop)

    Navigation Controller

    제일 하단에 rootController가 위치하고, 그 위로 view들이 stack처럼 쌓이는 방식이다.

    위의 그림처럼 3개의 view로 이루어진 어플리케이션의 경우라면, 

    위 그림 순으로 navigation stack에 view들이 쌓이게 될 것이다.

    먼저 firstViewController class에 해당 버튼에 대한 action method를 생성하고, (control+DRAG)

    action mode에 새로운 view를 push하도록 다음 코드를 작성해 준다.

    identifier는 1과 동일하게 Storyboard의 Identify Inspector에서 설정할 수 있다.

    secondViewController에서 다시 이전 view(first)로 돌아가고 싶은 경우에는,

    동일하게 버튼에 대한 action method를 생성하고, 현재 view를 pop시키도록 코드를 작성해준다.

     


    3. storyboard에서의 segue

    Storyboard 상에 시각적으로 보여지는 경로가 바로 segue의 흐름(view의 flow)이다. (control+DRAG) 동작을 통하여 손쉽게 view를 연결할 수 있다. 제거도 용이하다. 그냥 storyboard에서 연결된 화살표를 선택하고 삭제하면 view의 연결이 끊어진다.

     

    먼저 (control+DRAG)를 사용하여, view controller간에 segue를 형성해 준다. 

    (이 예시에서는 위쪽의 view를 A, segue가 가리키는 view를 B라고 하겠다. 우리는 지금 A->B로의 화면 전환을 구현하려 하는 것이다)

    여기까지는 Action Segue이다. 매우 단순하다.

     

    Manual Segue의 경우, 이 segue에 Identifier를 설정해 주어야 한다.

    ※ Identifier는 1,2와 마찬가지로 Storyboard의 우측 메뉴에서 설정해 줄 수 있다

     

    이제 A class에 segue를 실행할 action method를 생성하고, performSegue(:_) method를 호출하여 "ManualWind" segue를 실행시키도록 하는 코드를 작성해준다.

    그렇다면 B view에서 다시 A로 돌아가고 싶은 경우는 어떻게 해야할까? 

    화면 전환을 위한 버튼을 생성하고, action method를 A class에 정의한 뒤, (이 때 버튼과 action method를 연결하지 않아도 된다)

    B viewController에 생성되어 있는 화면 전환 버튼을 B viewController의 [Exit] 아이콘으로 (control+DRAG)하여 생성해둔 action method를 연결해주면 된다.

     


    (지금 진행 중인 ios 프로젝트는, view가 한 대여섯 개 있는데, view전환 방식이 다아아 다르다. 협업으로 진행하니까, 다들 선호하는 방식이 달라서 그런 것인데, 어제처럼 다른 팀원이 연결해둔 view를 조금 손 보려고 할 때는 머릿속이 혼돈의 카오스당... 협업은 역시 어려어)

    댓글

Designed by Tistory.