Быстрый модальный контроллер просмотра. Есть ли простой способ найти результат работы ViewController

#swift #uiviewcontroller

Вопрос:

У меня есть представление(viewController1), которое накладывается на модальный ViewController2. ViewController2 имеет три варианта

  1. Удалить все сеансы
  2. Выберите место
  3. Отмена

Довольно легко запустить модальный 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()
 

Этот метод обычно определяется с помощью протокола, поэтому он называется шаблоном протокола и делегирования. Я не показал вам всю схему целиком! Если вы поищете по этому термину, вы найдете множество полных примеров.