Given a view, how do I get its viewController?

后端 未结 13 729
北海茫月
北海茫月 2020-11-28 02:00

I have a pointer to a UIView. How do I access its UIViewController? [self superview] is another UIView, but not the

13条回答
  •  暖寄归人
    2020-11-28 02:47

    To get reference to UIViewController having UIView, you could make extension of UIResponder (which is super class for UIView and UIViewController), which allows to go up through the responder chain and thus reaching UIViewController (otherwise returning nil).

    extension UIResponder {
        func getParentViewController() -> UIViewController? {
            if self.nextResponder() is UIViewController {
                return self.nextResponder() as? UIViewController
            } else {
                if self.nextResponder() != nil {
                    return (self.nextResponder()!).getParentViewController()
                }
                else {return nil}
            }
        }
    }
    
    //Swift 3
    extension UIResponder {
        func getParentViewController() -> UIViewController? {
            if self.next is UIViewController {
                return self.next as? UIViewController
            } else {
                if self.next != nil {
                    return (self.next!).getParentViewController()
                }
                else {return nil}
            }
        }
    }
    
    let vc = UIViewController()
    let view = UIView()
    vc.view.addSubview(view)
    view.getParentViewController() //provide reference to vc
    

提交回复
热议问题