시범사업 개발 중에 이벤트 팝업 부분이 추가 되어 이벤트 팝업 부분을 추가하던중

팝업뷰를 띄우는데 이슈가 생겼다.

네비세이션 스택이 꼬여서 그런것 같은데 기존에 메인페이지에서 사용하던 팝업뷰 띄우는 로직으로 사용하니

팝업뷰를 띄운다음 종료할때 문제가 되었다

기존 코드는

//팝업뷰 띄우기
self.navigationController?.addChild(vc)
self.navigationController?.view.addSubview(vc.view)

//팝업뷰 에서 화면종료
self.removeFromParent()
self.view.removeFromSuperview()

네비게이션에 자식뷰로 스택을 쌓고 뷰를 표출해주는 방식이었는데

커스텀 네비게이션을 쓰다보니 여러 화면이 다양한 방식으로 짜집기된 상황에서 팝업뷰를 종료하면 기존에 쌓여있던 뷰도 싹 날아가는 모양새로 보였다.

그래서 모달 방식으로 뷰를 띄워주는 걸로 방식을 변경

//모달 방식으로 팝업뷰 띄워주기
vc.modalPresentationStyle = .overCurrentContext
self.present(vc, animated: false)

//팝업뷰 종료
self.dismiss(animated: false, completion: nil)

이 코드로 팝업뷰를 띄워 주는 것으로 변경하였다.

모달의 주요 특징

  1. 주의를 집중: 모달은 일시적으로 사용자의 주의를 집중시키는 데 사용됩니다. 모달이 표시되면 사용자는 해당 모달에만 집중하고 나머지 내용에는 주의를 기울이지 않게 됩니다.
  2. 일시적인 상태: 모달은 일시적인 상태이므로, 사용자가 모달과 상호작용할 때까지 원래의 작업에 돌아갈 수 없습니다. 모달이 닫히면 이전 작업으로 돌아가게 됩니다.
  3. 사용자 입력 요청: 주로 중요한 정보를 전달하거나 사용자의 결정을 요청하기 위해 모달을 사용합니다. 예를 들어, 알림, 확인 또는 취소와 같은 버튼을 포함하는 대화 상자가 모달로 표시될 수 있습니다.
  4. 화면의 일부만 커버: 일반적으로 모달은 화면의 일부만을 커버하며, 배경은 일시적으로 사용자의 입력을 막지만 완전히 가려지지 않습니다.
  5. 작업 완료 후 닫힘: 모달은 일반적으로 사용자의 작업이 완료되면 닫힙니다. 사용자가 모달 내에서 작업을 완료하거나 취소할 때 모달이 닫히고, 이전 작업으로 돌아갑니다.