[iOS] self.dismiss 에 대하여(1)

김승환·2022년 11월 15일
0

iOS

목록 보기
2/4

얼마 전 두 개의 viewController를 동시에 모달 형식으로 띄우는 방법에 대해 글을 작성했었다.
(앞으로, 가장 위에 뜨는 모달을 '1번VC', 그 아래 뜨는 모달은 '2번VC'라고 표기하겠습니다.)

모달을 띄울 때도 문제가 있었지만 그 모달들을 동시에 사라지게 하는 데도 문제가 발생했다.

1번VC를 dismiss 하면 2번VC도 같이 dismiss 되는 것이 목표였으나, 1번VC를 dismiss 했을 때 2번VC는 사라지지 않았다.

( 1 )
처음엔 단순하게 1번VC 에서 dismiss를 호출한 후 그에 대한 completion 으로 dismiss를 또 호출하면 순차적으로 사라질 줄 알았다.

하지만 실패했다.


( 2 )
그 다음으로 시도한 방법은 아래와 같은 방법을 시도했다.

private func dismissAll() {
	let (2번VC) = ~~~()
    dismiss(animation: true) {
    	(2번VC).dismiss(animation: true)
    }
}

위 방식은 메서드 안에 선언해준 (2번VC)가 내가 dismiss 하려는 그 주소값을 가진 viewController 가 아닌 새로운 주소값을 갖는 viewController를 선언한 후 dismiss 해주는 방식이므로 원하는 결과를 얻기 어려웠다.


( 3 )
마지막으로 시도해본 방식은

두 개의 모달을 띄우는 뷰에서 1번VC에 2번VC를 전달인자로 주어 해당하는 2번VC를 dismiss 해주도록 하였다.

결과는 성공이었으나

두 모달을 띄우는 VC에도 2번VC에 대한 정보가 있고,
1번VC에도 2번VC에 대한 정보가 있어 메모리를 더 쓰고 불필요하게 길어진 코드라고 느꼈다.



( 4 )
2번VC의 용도는 1번VC와 다른 .modalPresentationStyle을 보여주는 것만 있기 때문에 이에 대한 refactoring 으로
2번VC 안에 1번VC를 선언해주어 2번VC만 이용하여 원하는 결과를 얻을 수 있도록 해볼 것이다.

profile
사람의 마음을 사는 개발자가 꿈입니다. The Unexpected do The Unexpected.

0개의 댓글