Я предполагаю, что у вас есть MainViewController, из которого вы представляете PopupVC. Вы можете использовать шаблон делегата здесь.
Определите PopupVCDelegate следующим образом
protocol PopupVCDelegate {
func popupDidDisappear()
}
В вашем PopupVC определите свойство delegate
типа PopupVCDelegate
. А в методе closePopup
вызовите метод делегата popupDidDisappear
class PopupVC: UIViewController {
public var delegate: PopupVCDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func closePopup(_ sender: Any) {
dismiss(animated: true, completion: nil)
delegate?.popupDidDisappear()
}
}
Теперь любой класс, который принимает этот delegate
, сможет получить обратный вызов при вызове closePopup
. Так что заставьте свой MainViewController принять этот делегат.
class MainViewController: UIViewController, PopupVCDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
func showPopup() {
let popupViewController = //Instantiate your popup view controller
popupViewController.delegate = self
//present your popup
}
func popupDidDisappear() {
//This method will be called when the popup is closed
}
}
Другой способ - запустить уведомление через NSNotificationCenter
на closePopup
и добавить наблюдателя в MainViewController для прослушивания этого уведомления. Но это не рекомендуется в этом сценарии.
Редактировать
Как вы и просили указать метод NSNotificationCenter. Пожалуйста, измените ваши классы следующим образом
class PopupVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func closePopup(_ sender: Any) {
dismiss(animated: true, completion: nil)
NotificationCenter.default.post(name: NSNotification.Name("notificationClosedPopup"), object: nil)
}
}
class MainViewController: UIViewController, PopupVCDelegate {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(onPopupClosed), name: NSNotification.Name(rawValue: "notificationClosedPopup"), object: nil)
}
@objc func onPopupClosed() {
//This method will be called when the popup is closed
}
deinit {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "notificationClosedPopup"), object: nil)
}
}