Reputation: 12034
If I have this extension:
extension UIResponder {
var parentViewController: UIViewController? {
return (self.next as? UIViewController) ?? self.next?.parentViewController
}
}
And this one:
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
}
}
If I have a class like this:
class MyClass: UIView {
init() {
print("\( parentViewController == nil )")
print("\( getParentViewController == nil )")
}
}
Both results are null.
How I can get the implemented ViewController
from my UIView
without pass it as parameter (directly from the view
)?
Upvotes: 1
Views: 93
Reputation: 385590
You can’t get the view’s next responder in its init
because it hasn’t been set yet. An appropriate time would be in didMoveToWindow
.
Also, in your own answer, you said “…is the easier way to get the uiviewcontroller”, as if an app has only one instance of UIViewController
, but every non-trivial app has multiple view controllers.
Upvotes: 1