[iOS/Swift] Modal Style과 LifeCycle

2023. 9. 7. 17:26·Study/🚨 TroubleShooting

 

컬렉션 뷰의 셀을 선택한 후 좋아요 버튼 해제 시 DB에서 삭제되어 변경된 데이터가 컬렉션 뷰에 업데이트 되도록 구현하고 있었다.

Untitled.png

버튼 클릭 후 데이터가 삭제후 dismiss를 수행하도록 구현하였다.

뷰가 다시 나타나려면 viewWillAppear()가 호출 될 것이고, 뷰가 갱신되어 깔끔하게 정리 될 컬렉션 뷰를 기대하였다..

Sep-06-2023_14-25-34.gif

삭제 쿼리가 정상 작동하는 것은 확인했는데 대체 왜 바로 reload가 수행되지 않을까?

결국 sos 요청 후 굉장한 깨달음을 얻게 되었다ㅠㅠ

viewWillAppear()에서 데이터가 잘 변경되었는지 확인해보려 출력시켜보니 viewWillAppear()가 호출되지 않고있었다.

그렇다면 뷰가 사라지긴 한건가?

viewDidDisappear()도 호출해보자

Untitled.pngSep-06-2023_14-35-11.gif

애초에 컬렉션 뷰가 사라지지 않았던 것이다.

nav.modalPresentationStyle = .overFullScreen 

modalPresentation 방식에 문제가 있었다.

🔎 ModalPresentation Style에 따른 Life Cycle

  • currentContext / fullScreen
  • overCurrentContext / overFullScreen

✔️ currentContext / fullScreen

Sep-06-2023_00-37-54.gif

화면 전환 시 viewDidDisappear()가 호출되고 dismiss시 viewWillAppear()까지 호출 된 것을 확인할 수 있다.

✔️ overCurrentContext / overFullScreen

Sep-06-2023_00-35-00.gifSep-06-2023_00-36-20.gif

overCurrentContext와 overFullScreen 방식으로 present 후 dismiss하면 호출되지 않는다.

 

❓ 차이가 무엇일까?

overCurrentContext와 overFullScreen은 기존 뷰를 유지한 상태에서 새로운 뷰를 올려놓은 채 보여주는 것이기 때문에 기존 뷰가 사라지지 않는다. 때문에 viewDidDisappear()도 viewWillAppear()도 불리지 않는 것이다.

기존 뷰가 뒤에 남아있기 때문에 뷰에 alpha값을 설정할 수도 있다!

 

currentContext와 fullScreen은 뷰가 present할 때 컨텍스트에서 뷰를 날린다. 때문에 viewDidDisappear()와 viewWillAppear()가 모두 호출되는 것이다.

 

modalPresent 방식도 잘 모르는 채 그냥 overFullScreen 사용하였더니 발생한 오류였다.

fullScreen으로 전환하였더니 해결이 되었다.

 

 

 

뭐가 다른지 의문만 가지고 제대로 공부하지 않은 나의 탓이었다🥲

삽질.. 아니 학습했다^^

'Study > 🚨 TroubleShooting' 카테고리의 다른 글

Codable TypeMismatch 오류  (0) 2023.12.01
[iOS/RxSwift] API 통신에서 Single과 Observable  (0) 2023.11.14
테이블 뷰 셀 오류  (1) 2023.08.03
'Study/🚨 TroubleShooting' 카테고리의 다른 글
  • Codable TypeMismatch 오류
  • [iOS/RxSwift] API 통신에서 Single과 Observable
  • 테이블 뷰 셀 오류
김졀니
김졀니
🍎 iOS 개발
  • 김졀니
    졀니의 개발 공부✨
    김졀니
  • 전체
    오늘
    어제
    • 분류 전체보기
      • iOS
        • Swift
        • UIKit&SwiftUI
        • RxSwift&Combine
        • WWDC
      • Study
        • 🚨 TroubleShooting
        • 🌱 SeSAC
  • 블로그 메뉴

    • 홈
    • Github
  • 인기 글

  • 최근 글

  • 태그

    @PropertyWrapper
    mapkit
    인앱리뷰
    layoutIfNeeded
    wwdc23
    swift concurrency
    동시성프로그래밍
    CLLocation
    clipstobounds
    traits
    FileManager
    mainactor
    ios
    이미지 캐싱
    RxSwift
    Sendable
    observable
    Realm
    kingfisher header
    swiftdata
    Drawing Cycle
    OperationQueue
    Swift
    위치 권한
    actor
    ReactorKit
    pointfree
    의존성 주입
    displayPriority
    concurrency
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
김졀니
[iOS/Swift] Modal Style과 LifeCycle
상단으로

티스토리툴바