개인적으로 정리한 내용을 기록한 글입니다. 티스토리 블로그의 글을 마크다운 형식으로 재작성하였습니다.

네비게이션 컨트롤러를 다루게 되면 여러 뷰가 쌓이게 되는 경우가 있다. 직전의 뷰로 돌아가기 위해서는 자동으로 생성되는 Back 버튼을 이용하면 되지만 바로 첫번째 뷰로 이동하기 위해서는 코드 상의 간단한 작업이 필요하다. 바로 unwind segway이다. 다음과 같은 상황이 있다고 가정해보자.



이렇게 여러 뷰가 쌓여있는 상황에서, 세번째 뷰에서 두번째 뷰로 이동하기 위해서는 Back 버튼(1)을 활용하면 된다. 첫번째 뷰로 이동하기 위해서는 이전의 첫번째 뷰와 두번째 뷰에서 그랬던 것 처럼 화면 화면 중앙의 버튼(2)을 첫번째 뷰와 연결하여 새로운 세그웨이를 생성하면 될 것처럼 보인다. 그러나, 이러한 방법은 이미 쌓여있는 뷰 위에 첫번째 뷰를 한번 더 푸시하는 방식이 되어버린다.

이전에 쌓여있던 모든 뷰를 탈출하고 첫번째 뷰로 돌아가기 위해서는 우선, ViewController.swift 파일 내에 IBAction 메서드를 추가한다.

class ViewController: UIViewController {
    @IBAction func unwindToMain(_ segue: UIStoryboardSegue) { } 
    //이 함수를 새로 작성한다.
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

그 후 함수를 호출할 매개체가 되기를 원하는 대상(위의 경우, 화면 중앙의 버튼(2))을 뷰 컨트롤러의 Exit에 연결하여 작성한 메서드가 나타나는지 확인하고, 선택한다. 대상과 unwind 메서드가 연결되었다면 대상 우클릭시 다음과 같이 나타나게 될 것이다.

이렇게 연결 되었다면 완성.

여담으로 Back 버튼 외에 다른 버튼으로 직전의 뷰로 이동하고 싶을 경우 popViewController(animated:) 메서드를 호출하면 된다. 화면 이동 시 쌓이게 되는 점도 그렇고 스택의 원리를 생각하면 이해하기 쉬울 것 같다.


참고: https://www.inflearn.com/course/ios