Dismissing a View Controller with an Unwind Segue

Panther·2021년 7월 27일
0

https://developer.apple.com/documentation/uikit/resource_management/dismissing_a_view_controller_with_an_unwind_segue

"Configure an unwind segue in your storyboard file that dynamically chooses the most appropriate view controller to display next."

다음에 표시할 가장 적합한 뷰 컨트롤러를 동적으로 선택하는 언와인드 세그를 스토리보드 파일에서 설정합니다.

Overview

뷰 컨트롤러의 해제를 처리하려면 언와인드 세그를 생성해야 합니다. 뷰 컨트롤러르 제시하기 위해 사용하는 세그와 다르게 언와인드 세그는 전환 결과로 나타나는 구체적인 목표에 대한 약속 없이 현재 뷰 컨트롤러의 해제만을 약속합니다. 대신 UIKit은 런타임에 프로그래밍 방식으로 언와인드 세그의 목표를 결정합니다.

UIKit은 런타임에 언와인드 세그의 목표를 결정합니다. 그렇기에 뷰 컨트롤러 계층구조 설정에 대한 방법에 제한되지 않습니다. 아래 그림에서 보여지는 것처럼 같은 자식 뷰 컨트롤러를 제시하는 두 뷰 컨트롤러에 대한 시나리오를 생각해볼 수 있습니다. 다음에 표시할 뷰 컨트롤러가 무엇인지 결정하기 위해 복잡한 로직을 추가할 수 있습니다. 그러나 이와 같은 해결방법은 잘 확장되지 않습니다. 대신 UIKit은 최소한의 노력으로 모든 수의 뷰 컨트롤러로 확장할 수 있도록 하는 프로그래밍 방식의 간단한 해결방법을 제공합니다.

Define an Unwind Action on a Parent View Controller

언와인드 세그 액션 메소드의 존재는 UIKit에게 뷰 컨트롤러는 언와인드 세그에 대한 잠재적 목적지라는 것을 알려줍니다. 스토리보드에서 언와인드 세그를 설정하기 전에 적어도 하나의 뷰 컨트롤러에 이 액션 메소드를 추가해야 합니다. 만약 뷰 컨트롤러가 언와인드 액션을 갖지 않는다면, Xcode는 언와인드 세그 생성을 막습니다. 이 액션 메소드는 아래와 같은 형식입니다.

@IBAction func myUnwindAction(unwindSegue: UIStoryboardSegue)

액션 메소드에 특별하게 무엇인가를 할 필요는 없습니다. 이 메소드의 존재는 현재 뷰 컨트롤러를 해제하기에 충분합니다. 그러나 해제 프로세스가 진행되는 동안 관련 작업을 수행하기 위해 이 메소드를 사용할 수도 있습니다. 예를 들어 해제되는 뷰 컨트롤러에서 다시 부모 뷰 컨트롤러(해제되는 뷰 컨트롤러를 제시했었던)로 데이터를 전달하는 경우가 있습니다. 만약 그렇게 해야 한다면, 시작과 끝의 뷰 컨트롤러를 회수하기 위해 UIStoryboardSegue 객체를 사용할 수 있습니다.

Connect a Triggering Object to the Exit Control

스토리보드에서 trigeering 객체에 우클릭하고 뷰 컨트롤러 씬의 상단에 있는 Exit 컨트롤에 드래그함으로써 언와인드 세그를 생성할 수 있습니다. 뷰 컨트롤러에 있는 컨트롤 혹은 제스처 리코그나이저와 같은 타깃-액션 디자인 패턴을 지원하는 모든 객체로부터 세그를 생성할 수 있습니다.

객체를 Exit 컨트롤에 연결하는 경우 UIKit은 알고 있는 액션 메소드의 리스트를 제시합니다. 언와인드 세그를 완료하기 위해 하나의 액션 메소드를 선택하시기 바랍니다. 단지 액션 메소드만 선택하고 특정 뷰 컨트롤러는 선택하지 않습니다. 해제 이후에 표시되려면 부모 뷰 컨트롤러는 선택한 메소드를 구현해야 합니다.

사용자가 해제 액션을 시도하면, UIKit은 지정한 액션 메소드를 구현하는 뷰 컨트롤러를 현재 뷰 컨트롤러 계층구조에서 탐색합니다. 가장 가까운 뷰 컨트롤러를 탐색하며, 직계 부모로부터 시작합니다. 그리고 적합한 목표를 발견하기까지 뷰 컨트롤러 계층구조를 흐름에 따라 탐색합니다. 해당 메소들르 구현한 뷰 컨트롤러를 찾지 못하는 경우 언와인드 세그는 조용히 실패하고 현재 뷰 컨트롤러가 화면에 남습니다.

See Also


Storyboards

Customizing the Behavior of Segue-Based Presentations

세그가 일어나는 동안 뷰 컨트롤러 사이에 데이터를 전달합니다. 그리고 세그 발생 시 코드 내용으로 제어합니다.

https://developer.apple.com/documentation/uikit/resource_management/customizing_the_behavior_of_segue-based_presentations
https://velog.io/@panther222128/Customizing-the-Behavior-of-Segue-Based-Presentations

UIStoryboard

인터페이스 빌더 스토리보드 리소스 파일에서 표현되는 디자인 타임 뷰 컨트롤러 그래프의 캡슐화입니다.

https://developer.apple.com/documentation/uikit/uistoryboard
https://velog.io/@panther222128/UIStoryboard

UIStoryboardSegue

두 뷰 컨트롤러 사이에서 시각적 전환을 준비하고 수행하는 객체입니다.

https://developer.apple.com/documentation/uikit/uistoryboardsegue
https://velog.io/@panther222128/UIStoryboardSegue

UIStoryboardUnwindSegueSource

언와인드 세그에 대한 정보의 캡슐화입니다.

https://developer.apple.com/documentation/uikit/uistoryboardunwindseguesource
https://velog.io/@panther222128/UIStoryboardUnwindSegueSource


0개의 댓글