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

Minji Kim·2022년 2월 9일
0

iOS | Swift

목록 보기
9/13
post-thumbnail
post-custom-banner

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

아래 코드에서 HomeViewController와 DetailViewController가 나오는데 DetailViewController가 모달로 띄울 ViewController이고, HomeViewController는 DetailViewController가 dismiss된 후에 보이는 ViewController이다.

1. NotificationCenter Post

모달이 dismiss 될 때 NotificationCenter를 보낼 줄 것이다. DetailViewController가 사라지기 전인 viewWillDisappear에서 NotificationCenter를 보냈다.

// DetailViewController.swift
override func viewWillDisappear(_ animated: Bool) {
	super.viewWillDisappear(animated)
	NotificationCenter.default.post(name: NSNotification.Name("DismissDetailView"), object: nil, userInfo: nil)
}

2. NotificationCenter AddObserver

NotificationCenter을 보냈으니 이제 받을 것이다. HomeViewController의 viewDidLoad에서 NotificationCenter의 observer를 추가하는데, 여기서 중요한 것은 NotificationCenter를 post 할 때 적었던 NSNotification.Name과 동일한 이름을 적어야 받을 수 있다.

그리고 selector 메서드에서 CollectionView를 reload 한다. 이때 DispatchQueue를 이용해서 main 스레드에서 실행할 수 있도록 한다.

class HomeViewController: UIViewController {
  @IBOutlet weak var collectionview: UICollectionView!

  override func viewDidLoad() {
      super.viewDidLoad()

      NotificationCenter.default.addObserver(
          self,
          selector: #selector(self.didDismissDetailNotification(_:)),
          name: NSNotification.Name("DismissDetailView"),
          object: nil
      )
  }

  @objc func didDismissDetailNotification(_ notification: Notification) {
      DispatchQueue.main.async {
          self.collectionview.reloadData()
      }
  }
}

💙 참고한 블로그 💙

https://42kchoi.tistory.com/261

profile
iOS Developer
post-custom-banner

0개의 댓글