육식하는야채의 개발일지
article thumbnail

4.5.3 📌 Unwind - 화면복귀

복귀, 되돌아가기 등의 단어들은 Unwind라는 공식용어가 있다.

새로운 화면으로 전환하는 것을 Wind라고 하고 Unwind는 작업을 해제한다는 의미로 다시 원래 화면으로 돌아간다고 해석할 수 있다.

 

일반적으로 Unwind는 dismiss나 popViewController 메소드를 사용하는 방식이 있고

Unwind Segue를 이용하는 화면 복귀 방식이 있다.

 

뷰 컨트롤러 오른쪽에 Exit 아이콘이 있는데 UnWind Segue를 구현할 수 있도록 도와준다.

구현하는 방법은 다음과 같다.

 

1. 뷰 컨트롤러 A에 UIStoryboardSegue 타입의 인자값을 받는 @IBAction 액션 메소드를 정의한다.

2. 뷰 컨트롤러 B에 버튼을 만들고 이를 Exit 아이콘에 드래그해서 트리거를 생성한다.

3. 버튼이 드래그된 Exit 아이콘은 1에서 생성한 메소드를 인식하여 찾고, Unwind Segue를 자동 생성한다.

 

Unwind Segue 실습

Page A에서 B로 Present Modally로 연결해주었다.

 

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

PageA의 viewController파일에 UIStoryboardSegue 타입의 인자값을 가지도록 메소드를 정의한다.

호출시 매개변수를 생략할 수 있도록 (_) 언더바로 이용하여 처리했다.

 

PageB에 Exit를 우클릭하여 아까 정의한 메소드를 선택하여 Unwind버튼에 연결한다.

 

연결된 모습을 볼 수 있다. 

 

실행결과

Page A 뷰 컨트롤러에 작성한 메소드가 작동한 것인데 어떻게 작동하는 걸까?

코코아 터치 시스템이 앱 내부에 정의된 모든 메소드를 스캔하고, 이 중 UIStoryboard 타입 인자값을 입력받는 액션 메소드를 모두 수집한다.

그리고 Exit 아이콘의 목록으로 출력한다.

이 목록 중 하나에 연결하면 해당 메소드가 정의된 뷰 컨트롤러로 돌아가는 Unwind 메소드가 만들어진다.

 

Uwind Segue를 이용해서 한꺼번에 여러 페이지 복귀하기

Page 1에서 play버튼을 누르면 Page 2로 넘어가도록 액션 세그웨이를 연결하고 세그웨이 타입은 Show로 선택했다.

 

이 과정을 반복해서 Page 4까지 세그웨이로 연결하고 마지막 Page 4에는 첫 번째 화면으로 돌아갈 Home 버튼을 만들었다.

 

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

Page 1과 연결된 뷰 컨트롤러에 Unwind를 위해 액션 메소드를 정의한다.

 

Page 4의 Exit 아이콘에서 만든 메소드를 선택하고 Home 버튼과 연결한다.

 

실행결과

화면들은 연결된 세그웨이를 따라 Page 1, 2, 3, 4로 이동하고 

뷰 컨트롤러의 인스턴스는 차례로 내비게이션 스택에 쌓이게 된다.

Page 4의 Home버튼을 누르면 Page 1화면이 나오게 되고 중간에 쌓여있던 2, 3의 인스턴스는 메모리에서 모두 해제된다.

프로그래밍 용어로 dealloc 된다고 한다.

 

중간 페이지로 돌아가는 방법도 똑같다.

돌아가기를 원하는 페이지에 메소드를 만들어주고 Exit 아이콘을 통해 버튼과 연결하면 된다.

profile

육식하는야채의 개발일지

@육식하는야채

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!