본문 바로가기
iOS

[iOS] Unwind Segue

by thoonk: 2021. 11. 11.

Unwind Segue에 관해 기록합니다. 

 

Unwind Segue는 기본적인 Segue를 통해 여러 화면을 전환한 상태에서

맨 처음 View Controller로 돌아가기 위해서 사용합니다. 

 

Navigation Controller를 이용해서 rootView Controller로 Pop할 수 있지만 그렇지 않다면

Unwind Segue를 통해 해결할 수 있습니다.

 

아래 그림으로 예를 들자면,

A View Controller -> B View Controller -> C View Controller 

C View Controller -> A View Controller로 돌아간다고 했을 때 또 Segue를 하면 스택에 쌓이게 됩니다. 

 

이럴 때, UnwindSegue를 설정해서 B View Controller와 C View Controller를 스택에서 빼내고

A View Controller로 돌아갈 수 있습니다.

 

이제 Unwind Segue를 설정하는 방법을 설명하자면, 

A View Controller에 아래와 같은 함수를 설정합니다.

@IBAction func unwindToA(_ segue: UIStoryboardSegue) {}

 

그리고 스토리보드로 돌아가서 아래와 같이 Exit를 오른쪽 클릭하면

Segue가 생긴 것을 확인할 수 있고 C View Controller에 Segue를 설정합니다.

 

그리고 아래 그림과 같이 Unwind segue를 선택해서 Identifier를 설정해줍니다.

 

마지막으로 C ViewController 클래스에서 아래와 같이 설정하면 Unwind Segue 설정이 끝이 납니다.

@IBAction func goToATapped(_ sender: Any) {
    self.performSegue(withIdentifier: "unwindToA", sender: self)
}

 

추가적으로 기본적인 Segue와 같이 어떤 값을 넘기고 싶다면,

기본적인 Segue와 마찬가지로 performSegue의 sender를 이용해서 값을 넘기면 됩니다. 

let passedData = "iOS"
@IBAction func goToATapped(_ sender: Any) {
   performSegue(withIdentifier: "unwindToA", sender: passedData)
}

 

그리고 A ViewController의 unwindToA(_:) 메서드에서 아래와 같이 전달한 값을 받을 수 있습니다.

@IBAction func unwindToA(_ segue: UIStoryboardSegue) {
    if let sourceVC = segue.source as? ViewControllerC {
        print(sourceVC.passedData) // iOS
    }
}

 


Unwind Segue를 사용하면서 계속 생각이 안 나서 글로 남깁니다..

모든 가르침 환영합니다 :)

'iOS' 카테고리의 다른 글

[iOS] 버튼 이미지가 표시되지 않는 이슈  (0) 2022.07.11
[iOS] WKWebView 정리 Swift  (0) 2022.02.04
[iOS] CaseIterable  (1) 2021.06.27
[iOS] Outlets은 왜 옵셔널일까?  (0) 2021.06.18
[iOS] UIView & CALayer  (0) 2021.06.01

댓글