UIViewController & UIView: реагировать на изменения экрана снаружи объекта? - PullRequest
0 голосов
/ 01 ноября 2019

Что я пытаюсь сделать

Я пытаюсь определить:

  • , когда новый UIViewController появился на экране
  • , когдаUIViewController покинул экран
  • , когда на экран был добавлен UIView
  • , когда UIView покинул экран

Ключевой момент: Я пытаюсь обнаружить все эти изменения из снаружи .

Значение: я не хочу отвечать на эти изменения из существующих функций внутрисами классы, я хочу иметь возможность наблюдать за ними со стороны и реагировать соответственно.

Бонусные баллы: Если нам не нужно знать ЛЮБУЮ информацию о ЛЮБОМ из UIView s или UIViewControllers заранее, и нам не нужно добавлять ЛЮБОЙ код к самим представлениям, это было бы удивительно.

Мои первоначальные мысли заключаются в том, что они включают KVO и прослушивание свойства окна представления UIViewController для окна. и подобные вещи.

1 Ответ

1 голос
/ 01 ноября 2019

Вы можете создать класс BaseViewController, который наследуется от UIViewController и переопределяет методы viewDidAppear(_:) и viewDidDisappear(_:). В каждом из них вы можете опубликовать уведомление. Затем сделайте все UIViewControllers, которые вам нужны, наследовать от BaseViewController.

. Вам все равно придется добавить код ко всем вашим ViewController, но это будет просто наследование от одного класса.

class BaseViewController: UIViewController {

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // viewDidAppear notification
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        // viewDidDisappear notification
    }
}

Та же идея с классом BaseView.

class BaseView: UIView {
    override func addSubview(_ view: UIView) {
        super.addSubview(view)
        // notification
    }

    override func willRemoveSubview(_ subview: UIView) {
        super.willRemoveSubview(subview)
        // notification
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...