Есть ли в iOS функция делегата, чтобы получать уведомления, когда UIViewController возвращается наверх? - PullRequest
1 голос
/ 18 апреля 2019

Я новичок в Swift / iOS, но это кажется простым.У меня есть UIViewController и после некоторого действия я создаю экземпляр другого модального UIViewController, который в какой-то момент я уволю.Мне просто нужно создать VC, чтобы получить уведомление, когда это произойдет.Понимая, что это может быть обработано с помощью управления навигацией, я ищу способ сделать это модально, то есть

Я хочу передать модальный vc в иерархию:

let vc = storyboard.instantiateViewController(withIdentifier: "DetailView")
self.present(vc, animated: true, completion: nil)

икогда я делаю это в модальном vc:

dismiss(animated: true, completion: nil)

, я просто хочу, чтобы исходный vc, сидящий на заднем плане, был уведомлен, что он возвращается в фокус (или вверху) и сможет выполнять код.

Чего мне не хватает?

1 Ответ

1 голос
/ 23 апреля 2019

ОБНОВЛЕНО : ответ здесь очень прост.ViewController, который представлен модально со стилем представления «Over Current Context», не запускается ViewWillAppear в представляемом VC, когда он отклонен.Ответ ниже работал как хак, но я искал более простое решение.То есть, изменение стиля представления на полноэкранный.


Поэтому я в итоге реализовал компактное решение - некоторые скажут, что это не ООП без протокола, и я согласен - но в рамках этогоприложение, оно решает проблему в контексте простой конструкции present / dismiss.

В представлении vc я добавил этот код.

let vc = storyboard.instantiateViewController(withIdentifier: "DetailView") as! DetailViewController
vc.masterVC = self
self.present(vc, animated: true, completion: nil)

Объявленная функция в masterVC длявызываться, когда модальное отклонение, например:

func calledWhenModalDismisses() {
   // Do This
}

В всплывающем модальном DetailView я просто создаю элемент, указывающий на мастера:

var masterVC: MasterViewController?

А затем в моем удалении деталиЯ могу вызвать функцию, созданную в MasterVC.

masterVC?.calledWhenModalDismisses()
dismiss(animated: true, completion: nil)

Опять же, не совсем ООП-решение (без протокола), но я уверен, что это поможет кому-то с простым компактным решением.на простую проблему master / detail, когда представляющий vc должен быть предупрежден, поскольку деталь vc отклоняется.На самом деле Apple должна иметь функцию делегата, чтобы справиться с этим, когда виртуальный канал фокусируется, но они этого не делают.

...