Archive/꼼꼼한 재은씨 시리즈

[iOS14] Unwind 세그웨이를 이용하여 화면 이동하기

lgvv 2021. 4. 23. 18:45

자 생각해보자

내가 회원가입하는 로그인 기능을 구현중인데, alert로 확인을 클릭하면 회원가입 성공을 주고 그 화면에 남아있으면 무언가 이상하겠지?

뭔가 다음 진행과정으로 흐름이 계속 이어져야 하는데 프로필 화면으로 돌아가는거, 근데 쉽게 생각해서 이전 화면으로 돌아가면 돼

그러면 확인 눌렀을때 completion 부분에

self.navigationController?.popViewController(animate:false) 로 하면 간단히 되겠지?

그런데 show 타입으로 이미 나는 화면 전환을 했으니 돌아갈때도 네비게이션 컨트롤러를 이용해야만 한다는 문제점이 발생해.

그럼 어떻게 해야할까?

이 문제에 대해서 상세하게 이야기 하기 전에

우리는 앱을 구현하다 보면은 이전 화면이 아니라 더 이전 화면으로 돌아가야 하는 일이 분면히 존재해.

이동 경로 어디쯤엔가 있는 중간 경로로 돌아갈때도 있으니까 이 같은 경우에 모두 적용할 수 있는 범용 기능을 제작해야해

이게 바로 unwind 세그웨이야 

우리는 근데 이 예제에서 프로그래밍 버전으로 볼건데 우선 그림으로 순서도를 대략 이해해보자

 

회원가입 성공!
그림 A) 좌측으로부터 3번쨰 화면에서 회원가입 성공시 알럿을 눌러 두번쨰 화면으로 즉시 복귀하게 만들기.

 

언와인드 세그웨이 프로그래밍적으로 구현하는 법 

이때 backProfileVC 는 스토리 보드에서 연결한 것이 아니라 그냥 우리가 프로그래밍으로 작성한 것이다.

그러니까 저건 어떠한 버튼이랑도 연결된게 아니라 그냥 IBAction으로 작성되었다는 말이다.

이 메소드는 아무일도 하지 않는다

 

도커바에서 첫번쨰 도커에서 exit도커쪽으로 연결하면 이렇게 나온다

코드를 작성한 추가한 곳은 그림A에서 두번째 화면(프로필 하면)에 코드를 작성하지만 세번째 화면(신규 계정 등록씬)에 화면 작업을 한다는 점이 좀 특이하다.

왜 이렇게 하냐면 화면 복귀용 세그웨이는 목적지 기준으로 생성하는게 아니라 출발지 기준으로 생성하는 것이 원칙이기 때문에 화면 복귀용 세그웨이를 만들고 있는 것이다. 즉, 출발지가 신규 계정 등록화면임으로 언와인드 세그웨이 역시 이 화면에서 정의해야 맞다!

위의 작업을 하면 생기는 언와인드 세그웨이

 

언와인드 세그웨이를 클릭하여 identifier 부분에 우리가 IBAction 코드로 작성한 이름을 넣어준다.

이렇게 설정하면 스위프트 코드에서 작성한 화면 복귀용 세그웨이를 호출할 수 있다.

여기서 주의할 점은 identifier 부분에 꼭 함수명과 같지 않아도 되는데, 아래 그림을 보면

로그인 성공시 alert에 화면 복귀용 세그를 이용하여 돌아가게끔

self.alert는 두번째 매개변수도 completion 가지고 있다. 왜 completion이 되냐면

alert 처리를 조금 통합하여서 하였는데 아래 코드를 보자.

alert 함수를 만들어서 사용하였다. 두번째 매개변수가 nil이 아니여야 이 코드가 실행되니 걱정말자