티스토리 뷰

iOS

iOS) dismiss 에 대해서 알아보자

hyun99999 2022. 1. 28. 01:59
728x90
반응형

프로젝트를 진행하면서 연속적으로 쌓은 뷰를 제거해야하는 상황이 있었어요!

대기방에서 홈으로 가야했었지요.

스플래쉬 > 홈(MainTBC) > 코드입력팝업(CodeJoinVC) > 참여방 확인 뷰(JoinCheckVC) > 대기방

구조이고, 우리는 presentingViewController?.presentingViewController?.dismiss 이렇게 사용해서 코드로 JoinCheckVC 를 닫고, CodeJoinVC 를 닫으려고 했어요! 하지만 그렇지를 못했져 이유를 알아봅시다..

먼저 dismiss(_:) 메서드에 대해서 알아봅시다.

👾 dismiss(animated:completion:)

Dismisses the view controller that was presented modally by the view controller.

📌 Parameters

  • falg

transition 에 애니메이션을 적용하려면 true 를 전달해야한다.

  • completion

뷰 컨트롤러가 dismiss 된 후 실행할 블록이다.

📌 Discussion

presenting view controller 는 자신이 present 한 뷰컨트롤러를 닫을 책임이 있습니다. presented view controller 자체에서 이 메서드를 호출하면 UIKit 는 presenting view controller 에게 해제를 처리하도록 요청합니다.

여러 뷰컨트롤러를 연속적으로 present 해서 presented view controller 스택을 구축하는 경우, 스택의 낮은 뷰컨트롤러에서 이 메서드를 호출하면 바로 자식 뷰컨트롤러와 위의 모든 뷰컨트롤러가 해제됩니다.

이런일이 발생하면, 맨위의 뷰만 애니메이션 방식으로 닫힙니다. 중간 뷰컨트롤러는 스택에서 간단히 제거됩니다. 맨위의 뷰는 modal transition stlye 을 사용하여 dismiss 됩니다. 이 스타일은 스택의 다른 하위 뷰컨트롤러에서 사용하는 것과 다를 수 있다.

만약 presented view controller 에 대한 참조를 유지하려면 이 메서드를 호출하기 전에 presentedViewController 속성의 값을 가져와야 합니다.

completion 핸들러는 presented view controller 에서 viewDidDisappear(_:) 메서드 호출된 다음에 호출됩니다.


이렇다고 하네요! 먼저 문제점! .dismiss 를 해당 뷰컨을 해제하는 메서드로 저는 잘못알고 쓰고 있었어요... ㅜ

화면을 dismiss 로 걷어내는 객체는 해당 뷰컨이 아니라는 거죠! 예를들어서, VC1이 VC2를 불렀다고 가정한다면, VC2가 화면에서 해제되기 위해서는 VC1가 해제시켜줘야하는 거에요.
어라..? 그러면 self.dismiss 가 아니라 self.presentingViewController.dismiss 를 써야하는거 아닌가요?
에 대한 답변으로 사용자의 관점에서 전혀 차이를 느낄 수 없다고 해요.

이 두 함수의 차이는 completion 함수 구현 시 발생한다고 해요!
dissmiss를 한 이후에 결과를 presentingViewController에게 알려주느냐 아니면 사라진 ViewController(self)에게 알려주느냐의 차이가 있다라고 하네요!

그래서 다시 프로젝트로 돌아가보자구여

스플래쉬 > 홈(MainTBC) > 코드입력팝업(CodeJoinVC) > 참여방 확인 뷰(JoinCheckVC) > 대기방

대기방에서 홈으로 가려면 CodeJoinVCJoinCheckVC 를 해제해야하고, 그래서 MainTBC 에서 해제를 요청하면 상위 뷰컨들을 해제할 수 있어요!

결국 presentingViewController?. presentingViewController?. presentingViewController 에서 dismiss 를 호출해주어야 하는 것이지요!

출처:

iOS 화면 전환

Apple Developer Documentation

728x90
반응형
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
링크
Total
Today
Yesterday