티스토리 뷰

안녕하세요 :]

 

간혹 개발을 하다 보면

현재 화면을 닫음과 동시에 다른 화면을 열어야 하는 경우가 생기더라고요.

그 경우도 여러 가지 케이스가 있는데

제가 경험한 케이스를 공유해보도록 하겠습니다.

 

 

1. dismiss 후 present 하기

 

보통 dismiss에 있는 컴플리션 핸들러를 사용해서

present 코드를 입력합니다.

 

 

자, 위의 코드가 정상적으로 실행이 될까요??

 

정답은 "안된다"입니다.

자기 자신인 FirstViewController에서 dismiss를 하고 난 뒤

FirstViewController에서 SecondViewController를 present 하고 있습니다.

 

이미 FirstViewController는 사라졌는데

SecondVIewController를 present 할 수 있을 리가 없겠죠?

 

 

그렇기 때문에 위의 코드처럼

FirstViewController를 present 한 pvc를 찾고

pvc에서 present를 해줘야 합니다.

 

2. rootViewController까지 dismiss 하고 present 하기

 

이 같은 경우는

화면의 스택이 많이 쌓여있는 상태에서

많이 찾게 될 방법인 것 같습니다.

 

아래의 코드는

본인인증 VC를 present 하고

본인인증이 끝나면 HomeVC로 이동하게 되는데,

 

더 이상 사용하지 않는 본인인증 VC를 dismiss 하고

HomeVC를 띄우는 상황으로 가정하도록 하겠습니다.

(본인인증 VC 뒤에도 처리 방침 동의와 같은

필요 없는 VC들이 많이 쌓여있다고 가정하겠습니다.)

 

 

첫 번째 줄을 보시면

rootViewController까지 전부 dismiss 시켜주는 코드입니다.

 

그리고 rootViewController의 dismiss completion에서

띄울 VC를 생성하고

appDelegate를 찾아서

rootViewController의 present를 실행하게 됩니다.

 

그러면 rootViewController와 현재 VC 사이에 있던

모든 VC들이 dismiss 되고

rootViewController는 새로운 VC를 present 하게 됩니다.

 

그 결과,

rootVC -> AVC -> BVC -> CBC -> DVC 였다면

AVC, BVC, CBC, DVC가 전부 dismiss 되고

rootVC -> HomeVC인 상태가 되는 겁니다.

 

제가 원하는 코드가 위의 코드였는데

생각보다 머리로 잘 안 그려져서

정말 삽질을 많이 했네요...

 

이번 삽질을 통해서

presentingVC, presentedVC에 대한 것도

다시 한번 정리해볼 수 있었네요 ㅎㅎ

 

감사합니다.

 

댓글