Существует несколько способов достижения этого делегата, закрытия и стиля модального представления
Способ 1: если вы добавите navigationController.modalPresentationStyle = .fullScreen
, это вызовет viewWillAppear
контроллера, который представляет контроллер и ваш метод перезагрузки будет называться
Способ 2: Делегирование и протокол
Объявите протокол, подобный приведенному ниже, во втором контроллере
protocol CallParent{
func reloadCollection()
}
Объявить свойство для хранения ссылки контроллера представления, подтверждающего этот протокол, во втором контроллере
weak var myParent : CallParent?
Теперь вызовите reloadCollection перед отклонением
if let parent = myParent {
parent.reloadCollection()
}
Подтвердите первый контроллер с протоколом CallParent
class FirstVC: UIViewController,CallParent{
Затем при вызове segue
@objc private func menuButtonAction(sender: UIButton) {
let addVC = AddViewController()
addVC.myParent = self
let navigationController = UINavigationController(rootViewController: addVC)
performSegue(withIdentifier: "addEventSegue", sender: sender)
}
Способ 3: В представленном вами контроллере вызовите функцию отклонения, подобную этой
if let fvc = self.presentingViewController as? FirstController {
self.dismiss(animated: true) {
fvc.callReloadFunctionHere()
}
}
Способ 4: Закрытие
class SecondViewController: UIViewController {
var onViewWillDisappear: (()->())?
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
onViewWillDisappear?()
}
...
}
В FirstController
@objc private func menuButtonAction(sender: UIButton) {
let addVC = AddViewController()
addVC.onViewWillDisappear = {
// reload collection view here
}
let navigationController = UINavigationController(rootViewController: addVC)
performSegue(withIdentifier: "addEventSegue", sender: sender)
}