[iOS] Unwind Segue
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를 사용하면서 계속 생각이 안 나서 글로 남깁니다..
모든 가르침 환영합니다 :)