Получить ViewController из унаследованного класса UIView - PullRequest
0 голосов
/ 26 апреля 2018

Если у меня есть это расширение:

extension UIResponder {
    var parentViewController: UIViewController? {
        return (self.next as? UIViewController) ?? self.next?.parentViewController
    }
}

И вот это:

extension UIView {
    var getParentViewController: UIViewController? {
        var parentResponder: UIResponder? = self
        while parentResponder != nil {
            parentResponder = parentResponder!.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }
}

Если у меня есть такой класс:

class MyClass: UIView {

    init() {
        print("\( parentViewController == nil  )")
        print("\( getParentViewController == nil  )")
    }
}

Оба результатаимеют значение null.

Как я могу получить реализованный ViewController из моего UIView без передачи его в качестве параметра (непосредственно из view)?

1 Ответ

0 голосов
/ 26 апреля 2018

Вы не можете получить следующий респондент вида в init, потому что он еще не был установлен.Подходящее время будет в didMoveToWindow.

Кроме того, в своем собственном ответе вы сказали «… это более простой способ получить контроллер uiview», как если бы приложение имело только один экземпляр UIViewController,но у каждого нетривиального приложения есть несколько контроллеров представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...