[iOS] 모달로 띄운 뷰 컨트롤러를 닫았는데, viewWillAppear가 실행되지 않을 때

Ujeon 🍵
3 min readJul 27, 2021

--

UIViewControllerviewWillAppear 메서드는 화면에 뷰 컨트롤러의 뷰가 화면에 나타날 때 마다 호출되는 생명주기 메서드입니다.

따라서 viewWillAppear 는 뷰가 화면에 돌아올 때 마다 무언가를 할 수 있게 해주죠.

하지만 viewWillAppear 가 필요한 뷰 컨트롤러에 작성을 해주었음에도 뷰가 화면에 돌아올 때 마다 실행되지 않았습니다.

현재 상황은,

ViewController 클래스에서 FormViewController 클래스를 present Modally 방법으로 세그웨이를 통해 화면이동을 하고 있습니다 :

그리고 FormViewController 뷰 컨트롤러의 뷰에서 Submit 버튼을 클릭하면 FormViewController 를 띄워주고 있는 ViewController 로 되돌아 갑니다 :

dismiss 메서드를 통해 원래 뷰로 되돌아 갑니다.

그리고 ViewController 에서는 viewWillAppear 메서드를 통해 화면에 뷰가 나타날 때 마다 로직이 실행되길 기대했습니다.

하지만! 처음에 앱이 실행될 때를 빼고는 뷰가 화면에 나타나더라도 다시 viewWillAppear 가 호출되지 않았습니다 :

FormViewController에서 ViewController로 되돌아와도 viewWillAppear가 다시 호출되지 않습니다.

이는 애플이 iOS 13부터 기본 프레젠테이션 스타일을 풀 스크린이 아닌 형태로 변경했기 때문에, 현재 뷰 컨트롤러를 닫더라도 viewWillAppear 를 호출하지 않기 때문입니다.

따라서 세그웨이를 통해 화면을 이동할 때, 기본 프레젠테이션 스크린을 풀 스크린으로 변경해주면 viewWillAppear 가 매번 호출 됩니다 :

viewWillAppear가 매번 호출됩니다.

해결되었습니다~! 👏😎

지금까지 present modally 로 화면을 이동했을 때 viewWillAppear 가 다시 호출되지 않는 이유와 해결방법에 대해 알아보았습니다.

참고 자료

ViewWillAppear not called after DismissModalViewController

--

--

Ujeon 🍵
Ujeon 🍵

Written by Ujeon 🍵

Hi there, this is Ujeon. I want to be a developer who passes on value through development :)

Responses (1)