#swift #uiviewcontroller
Вопрос:
У меня есть представление(viewController1), которое накладывается на модальный ViewController2. ViewController2 имеет три варианта
- Удалить все сеансы
- Выберите место
- Отмена
Довольно легко запустить модальный ViewController, как это в viewController1
@objc func presentMenu() {
let overlayController = ViewController2()
overlayController.transitioningDelegate = self
overlayController.modalPresentationStyle = .fullScreen
present(overlayController, animated: true)
}
Это в основном показывает ViewController2. Однако код viewController1 прошел мимо этого, и где я могу узнать, что этот ViewController2 был отклонен?
Ответ №1:
Вы могли бы реализовать viewWillAppear
и попытаться выяснить, что причина, по которой вы появляетесь, заключается в том, что представленный контроллер полноэкранного просмотра отклоняется. Но было бы еще лучше использовать стандартный шаблон, в котором представленный контроллер полноэкранного режима сообщает вам, что он отклоняется. Чтобы сделать это возможным, у него есть делегат, который, как вы убедитесь, является вами:
overlayController.modalPresentationStyle = .fullScreen
overlayController.delegate = self
present(overlayController, animated: true)
Затем контроллер наложения вызывает известный метод в своем делегате, когда он собирается быть отклонен:
self.delegate.dismissalIsHappening()
Этот метод обычно определяется с помощью протокола, поэтому он называется шаблоном протокола и делегирования. Я не показал вам всю схему целиком! Если вы поищете по этому термину, вы найдете множество полных примеров.