Unwind Segue를 통한 화면전환이 정상적으로 작동하지 않아 질문드립니다

현재 시뮬레이터 구현시 상황

나의 스토리보드

현재 MakeMemeVC에서 Button을 클릭시 MyListTableViewController로 전환되게 하려고 구현 중입니다.
이를 unwindToSegue를 통해 바꿀 수 있을 거라고 생각했습니다. 그래서 아래 1,2 번 그림의 코드 처럼 VC에다가 @IBAction func unwindToVC(segue:) 를 만들어서 MakeMemeVC에서 VC로 우선 이동 후에 unwindToVC 함수 내부에서 myList로 이동하는 segue를 performSegue로 작동시키려고 했습니다.

처음에는 2번 그림처럼 segue의 identifier만 맞으면 바로 myListTVC를 띄울 수 있을거라 생각했습니다만 위 시뮬레이터 영상처럼 되었습니다. 그래서 1번 그림과 같이 segue의 sourceVC을 찾고, 그것의 presentingVC을 찾아서 myListView를 띄우는 segue를 구현해야되나 싶어 시도해 보았지만 이 방법 또한 위 영상처럼 다시 myListTVC에 갔다가 다시 VC로 복귀가 됩니다.

위 두가지 방법 외에도 unwindToSegue를 바로 TVC로 이동시켜서 하는 등의 방법을 생각해 구현해보았지만 이는 modal로 올라온 MakeMemeVC이 dismiss조차 되지도 않더군요…

대체 어디서 문제가 발생한 것일까요… 긴글 읽어주셔서 감사합니다.

좋아요 1

garlic 님,

구현에 있어서 궁금한 게 있는데요,

VC 에서 myList 와 MakeMemeVC 로 흐름이 갈라지는 이유가 있나요?
MakeMemeVC가 myList의 디테일 뷰 자체가 되거나 디테일 뷰의 모달로 올라와야 하는 부분은 아닌지요?

참고로 Unwind Segue 는 새로운 곳으로 가는 네비게이션이 아니라 지나온 길에서 어느 특정 위치로 돌아가는 역할이기 때문에 이미 지나온 뷰가 아니면 Unwind 할 수는 없습니다.

그리고 모달은 올라온 곳으로 내려가는 게 사용자 멘탈모델에도 맞기 때문에
MakeMemeVC 에서 myList로 돌아간 뒤, myList 로 진행하는 completionHandler를 사용할 수는 있겠지요.

제가 질문을 잘 이해한 게 맞나요?

넵 제대로 이해하신 것 같습니다.

우선 VC에서 myList와 MakeMemeVC로 흐름이 갈라지는 이유는, VC의 pickerView의 각 component들 중 선택된 row의 이미지와 label.text를 Let’s MakeMeme 버튼을 클릭시 MakeMemeVC로 전달하려고 합니다. 그리고 MakeMemeVC에서 Button을 클릭시에 인스턴스를 생성하고 UserDefault에 저장시키려고 합니다. 저장된 인스턴스 값들을 MyListTableViewController의 각 cell들에 뿌려주려고 생각중이었습니다. 그래서 사용자들이 바로 저장된 값들을 확인할 수 있도록 하기 위해 모달을 내린 후에 바로 MyListTVC로 이동시키려고 했던 것이었습니다.

물론 myList의 디테일 뷰는 따로 만들어 두었습니다. makeMeme과 거의 비슷합니다!

제가 하나의 뷰 흐름에서 다른 뷰 흐름으로 가도록 하는 구현 방법을 모르고 있었습니다. 그러던 도중 unwindSegue가 생각이 났고, 시도해봤는데 제대로 되지가 않네요 ㅠ. @skyoon님이 주신 completionHandler 한 번 알아봐야 겠네요 ㅎㅎ