suvera-dev 🥦

iOS) Modal dismiss한 후 CollectionView reload 하기 본문

iOS

iOS) Modal dismiss한 후 CollectionView reload 하기

suvera 2022. 3. 28. 06:21

안녕하세요 티스토리 너무 오랜만에 .. 들어와버렸네요... 현생을 구역꾸역 살다가..

 

오늘은 제가 개발을하면서 막혔던 부분에 대해서 공유를 드리고자 합니다 ! 

우선, 간단하게 설명 드리자면 제가 구현하던 기능은.. 

요로케 모달창에서 카테고리를 추가하면 모달창을 dismiss 했을 때 바로 reload가 되는 그런 기능이었슴미다 !

처음에는 아무고토 모르고 왜 계속 바로 reload가 안될까 ... 고민을 했는데요 !

 

📖 모달을 dismiss 한 후에는 viewWillAppear viewDidAppear가 실행되지 않기 때문에 CollectionView를 reload 하려면 NotificationCenter로 구현해야된다고 합니다!

 


 

1. 먼저 CollectionView를 갖고 있는 뷰컨에다가 addObserver를 해줍니다 ! ( 함수로 따로 뺀 뒤, viewDidLoad 에서 호출 해줬습니다. remove 작업도 잊지 마셔용 ! )

private func reloadCategoryNotification() {
        NotificationCenter.default.addObserver(self, selector: #selector(didDismissAddCategoryNotification(_:)), name: .reloadCategory, object: nil)
    }

📌 removeObserver를 해줘야하는 이유 ?

: NotificationCenter 는 싱글턴 인스턴스라서 여러 오브젝트에서 공유합니다! 그래서 옵저버를 등록한 오브젝트가 메모리에서 해제되면 NSNotificationCenter에서도 옵저버를 없앴다고 알려줘야 됩니다~~! 보통은 Counterpart되는곳에 맞춰서 해제 시켜줍니다 :) 

 

요렇게요 ! 

viewWillAppear < - > viewWillDisappear

viewdidload() < - > deinit() : 1번씩만 호출되니까

 

저는 모든 viewcontroller가 상속받고 있는 baseViewcontroller에서

요렇게 등록된 observer들을 전체 제거 해주는 코드를 넣었습니다!

deinit {
        NotificationCenter.default.removeObserver(self)
    }

 

2. 모달을 dismiss 해주는 부분에서 post 해주기 

self.dismiss(animated: true) {
	NotificationCenter.default.post(name: .reloadCategory, object: nil)
}

3. observer에 연결된 함수 구현해주기 ! 저의 경우 모달창에서 서버에 post하는 과정이 수행되기 때문에 서버에서 다시 get을 해오는 함수를 넣어주었습니다! 

@objc
private func didDismissAddCategoryNotification(_ notification: Notification) {
    getCategory()
}

 

생각보다 간단하긴 하지만.. ! 몰랐던거라 함 정리하고 갑니다 ~

 

 

- 참고한 블로그 !

 

[iOS | Swift] Modal dismiss 한 후 CollectionView Reload 하기 (NotificationCenter)

NotificationCenter를 이용해서 Modal을 dismiss한 후에 CollectionView를 Reload 해보자~!

velog.io

 

'iOS' 카테고리의 다른 글

iOS) Compositional Layout  (2) 2022.05.09
iOS) WKWebView  (0) 2022.03.28
iOS ) URLSession 알아보기  (2) 2022.02.28
iOS ) GCD 사용시 주의해야할 사항  (0) 2022.02.06
iOS ) iOS 15 UIButton.ConfigurationUpdateHandler  (0) 2022.02.05
Comments