BOID

[iOS] 화면복귀 -Unwind란? -HoonIOS 본문

IOS 시작기

[iOS] 화면복귀 -Unwind란? -HoonIOS

HoonIOS 2021. 3. 29. 11:02

안녕하세요 HoonIOS입니다 :)

 

저번 시간에는 스토리보드로 화면 전환인 매뉴얼 세그웨이, 액션 세그웨이에 대해 알아봤는데요. 이번에는 화면 복귀인 Unwid에 대해 알아보겠습니다.

 

Unwind 화면 복귀

화면을 복귀하는 방법은 크게 두 가지가 있습니다.

  • present(_:animated:)에는 dismiss를 pushViewController(:animated:)에는 popViewController인 화면 복귀용 메서드를 사용하여 Unwind처리를 해주는 것입니다.
  • 세그웨이릍 통해 화면 이동을 한 경우에는 Unwind Segue를 이용하는 것입니다, 이따가 자세하게 설명해 드릴 텐데요 도크바 아이콘 중 세 번째 아이콘은 Exit라고 하는데 이것이 현재 화면을 종료하고 이전 화면으로 되돌아가는 Unwind Segue를 구현할 수 있습니다.

- 두 번째 방법인 Exit 아이콘을 사용하는 방법은 화면 복귀를 사용할 버튼을 만들고 이 버튼을 Exit아이콘에 드래그해서 트리거를 생성하거나 또는 수동으로 실행되는 Unwind segue를 만들어 호출하면 간단하게 구현할 수 있습니다.

- A뷰 컨트롤러에서 B뷰 컨트롤러로 이동한다고 가정을 하면은 Exit아이콘에 버튼을 만드는 컨트롤러는 B컨트롤러이고 Unwind Segue 메소드를 만들어야 하는 곳은 A뷰 컨트롤러(복귀하고자 하는 컨트롤러)입니다.

 

-이렇게 글로만 보면 무슨 말인지 이해가 안 될 테니 이번에는 만들면서 실습해보겠습니다.

 

Unwind 생성하기 

- A뷰 컨트롤러에서 B뷰 컨트롤러로 이동하고 B뷰 컨트롤러에서 A뷰 컨트롤러로 돌아올수 있는 화면을 생성하겠습니다.

 

  1. A 뷰컨트롤러에 Next라는 버튼을 다음 B 뷰컨트롤러로 present Modally 액션 세그웨이를 연결해줍니다.

  2. 이제 A 뷰컨트롤러로 뒤로 가는 것이니 해당 뷰 컨트롤러에 Unwind를 불러올 @IBAction 메소드를 설정해줍니다. 여기서 UIStoryboardSegue를 인자 값으로 받는 매개변수를 정의해줍니다.

 

 

    3. 이제는 B 뷰 컨트롤러에 버튼을 생성하고 이 버튼과 A 뷰컨트롤러에 만들어준 Unwind를 연결을 해야 합니다.

   

    4. 아래 그림과 같이 Unwind 버튼을 도크바에 있는 Exit탭에 드래그를 합니다.

버튼과 Exit탭 연결

    

    5. 그러면 아래와 같이 A뷰 컨트롤러에서 @IBAction으로 정의해준 unwind메서드가 나오는데 이 메서드와 연결해 주면 됩니다.

* 어? 어떻게 A뷰컨트롤러에 작성한 메소드이름이 나오는것일까요?

  - 코코아 터치 시스템은 앱 내부에 정의된 모든 메소드를 스캔하여, 이중에서 UIStoryboard타입의 인자값을 입력받는 액션 메소드를 모두 수집하고 Exit 아이콘의 목록으로 출력을 합니다.

- 여기서 작성한 unwind메소드는 현재 화면을 종료했을 때 어떤 화면으로 이동할지 여부를 알기 위한 이정표 역할을 하는데, 이것을 이정표 메소드라고 합니다.

 

- 그럼 이제 결과물을 확인해보겠습니다, 뒤로 가기 동작을 하는 것을 확인할 수 있습니다.

 

unwind창 결과

 

*추가

  1. 그럼 만약 1, 2, 3, 4순서로 이루어진 내비게이션 컨트롤러가 있는데 여기서 4에서 1로 가기위해서는 어떻게 해야할까요?

    - 정답은 1에서 UIStoryboardSegue를 인자값으로 가지는 Unwind 메소드를 1 내비게이션 컨트롤러에 설정을 해주고 위에서 같은 방식으로 4에서 트리거를 도크바에 있는 exit를 통해 1 내비게이션 컨트롤러에 있는 Unwind메소드와 연결을 해주면됩니다.
  2.  해당 버튼을 누르면 1번 내비게이션 컨트롤러로 가면서 스택의 중간에 있는 2, 3 내비게이션 컨트롤러의 인스턴스는 메모리에서 모두 해제가 됩니다. 
    (메모리에서 해제가 되는것을 프로그래밍 용어로 dealloc이라고 합니다 :)

- Unwind의 가장 큰 특징은 내비게이션 컨트롤러나 프레젠테이션 컨트롤러 모두에서 실행이 되는 것이 특징입니다.

- Unind 메소드의 가장 중요해야 할 점은 뒤로 돌아가야 할 곳에서 UIStoryboardSegue객체를 인자 값으로 받는 메소드를 구현해 주어야 한다는 것입니다.

 

지금까지 뒤로 가기를 하는 Unwind메소드에 대해서 알아봤는데요 세그웨이로 지정을 한 것이면 필수이니, 꼭꼭 이해하시길 바랍니다.

다음에는 커스텀 세그웨이에 대해 알아보겠습니다, 커스텀 세그웨이를 잘 사용하면 효과도 줄 수 있고 새로운 기능을 갖춘 세그웨이 객체를 정의할 수 있습니다.

반응형
Comments